Я хотел бы отсортировать этот вывод по lstart
(начало процесса):
ps -eo lstart,pid,cmd
Есть ли способ вывести lstart в формате ISO, например, ГГГГ-ММ-ДД ЧЧ: ММ: СС?
Но сортировка сама по себе не решает проблему. Я действительно хотел бы иметь формат даты ISO.
lstart
такой странный формат? Это близко к RFC 2822, но год заканчивается.Ответы:
С
awk
+date
сотрудничество:Альтернативный подход с использованием ключевого слова ps
etimes
(время, прошедшее с момента запуска процесса, в секундах):date -d -"$1"seconds
- разница между текущей меткой времени иelapsed
временем, даст значение метки времени процессаисточник
etimes
вместоlstart
вас, вы получите истекшее время в секундах, в которое будет немного легче перейтиdate -d -999seconds
.Вы можете сортировать с:
источник
Обратите внимание, что
lstart
это не один из стандартныхps
столбцов Unix .Не у всех систем есть одна, и выходные данные варьируются между реализациями и, возможно, между локалями.
Например, во FreeBSD или с
ps
fromprocps-ng
(как это обычно бывает в не встроенных системах на основе Linux) и вC
локали вы получите:На macOS:
Кроме того, поскольку он не дает смещения по Гринвичу, выходные данные неоднозначны в часовых поясах, которые реализуют летнее время (где в течение года существует один час, когда одни и те же даты встречаются дважды) и не всегда сортируются в хронологическом порядке.
Здесь, вы можете заставить время быть UTC и использовать
perl
«sDate::Manip
модуль для разбора даты в пути , который понимает различные природные формы:Или с помощью
ksh93
которого также распознает эти форматы даты:(будьте осторожны, он снимает конечные пробелы с каждой строки)
Или с помощью
zsh
GNUdate
:Или с
bash
(илиzsh
) только в Linux и с GNUdate
:Также имейте в виду, что время запуска процесса не обязательно совпадает с тем, когда процесс выполнял команду в последний раз, поскольку процессы обычно могут выполнять более одной команды за время жизни (обычно это не те команды, которые никогда не выполняют команду) , Другими словами, это не обязательно соответствует времени, когда команда (
args
поле, стандартный эквивалентcmd
) была запущена.Посмотрите, как
sleep 123
видно, что он был запущен в то же время,sleep 234
хотя и был запущен через 4 секунды. Это потому, что процесс 9388 изначально выполнялсяsh
(и ждал 4 секундыsleep 4
) перед тем, как он выполнялсяsleep 123
(и до этого он выполнялzsh
код, который был разветвлен моей интерактивной оболочкой, так что в разные моменты времени для этого процесса вы могли бы иметь видно вps
выводе:zsh
тоsh
, тоsleep
).источник
Вот реализация с более высокой производительностью (не нужно выполнять новый процесс на строку):
и это позволяет довольно легко изменить порядок столбцов. Например,
pid
первое и начальное время как второй столбец:источник