Битлента
Сетевые команды и утилиты5 мин чтения·

ps -eo: как вывести свои столбцы, время работы и родителя процесса

Как собрать нужный вывод ps через -o: pid, ppid, etime, rss, stat, comm. Отличия Linux и macOS, сортировка, дерево процессов и пример отчёта.

Кратко

ps -eo pid,ppid,etime,%cpu,%mem,rss,stat,comm выводит только нужные столбцы для всех процессов. Суффикс = после имени столбца убирает заголовок. В Linux доступны --sort и --forest, а для команды с аргументами в macOS нужен столбец command (cmd там нет).

Зачем собирать вывод ps самому

Готовая форма ps aux хороша для общего взгляда, но в ней нет некоторых важных сведений, например времени работы процесса и номера родителя, а лишние столбцы мешают сравнению. Ключ -o (output format) позволяет указать, какие именно столбцы показывать и в каком порядке. Вместе с -e, который выбирает все процессы, получается основа для собственных отчётов.

Пример: ps -eo pid,ppid,etime,%cpu,%mem,rss,stat,comm. Названия столбцов перечисляются через запятую без пробелов. Заголовки в выводе печатаются по умолчанию. Чтобы задать пустой заголовок, после имени столбца ставят знак равенства: ps -p 1234 -o etime=. Если пустые заголовки заданы у всех выбранных столбцов, строка шапки не печатается, и это удобно в скриптах, когда нужно получить одно значение без шапки.

Если в системе нет такого столбца, ps сообщит об ошибке или выдаст пустую колонку. Полный список имён лежит в справке: man ps, раздел о спецификаторах формата. Он различается между Linux и macOS, поэтому не переносите длинные команды между системами, не проверив их.

Столбцы, которые стоит знать

Часть спецификаторов работает одинаково в Linux и macOS, часть относится только к одной системе.

СтолбецЧто показываетСистемы
pidномер процессаобе
ppidномер родительского процессаобе
etimeвремя с момента запускаобе
lstartдата и время запускаобе
%cpu, %memдоли процессора и памятиобе
rssзанятая оперативная память, килобайтыобе
vszразмер виртуальной памятиобе
statсостояние процессаобе
commимя исполняемого файлаобе
cmdкоманда с аргументамиLinux (в macOS нет)
commandкоманда с аргументамиmacOS; в procps для Linux это, по справке, синоним cmd
nlwpчисло потоковLinux

Формат etime имеет вид [[дни-]часы:]минуты:секунды: например, значение вида 2-03:15:40 читается как два дня, три часа, пятнадцать минут и сорок секунд. По нему сразу видно, что процесс давно работает или только что перезапустился, и это помогает разбираться с «внезапными» перезапусками служб.

Столбец rss удобнее, чем vsz, при оценке реального потребления памяти. Виртуальный размер включает отображения, которые физически не заняты, поэтому он часто выглядит пугающе большим.

Сортировка и дерево процессов

В Linux (procps) сортировка встроена в сам ps. Пример: ps -eo pid,ppid,%mem,rss,comm --sort=-rss | head -n 11 покажет десять крупнейших по резидентной памяти процессов плюс заголовок. Знак минус означает убывание, а без него порядок возрастающий. Можно указать несколько критериев через запятую.

В macOS ключа --sort нет. Вместо него используйте сортировку оболочкой: ps -eo pid,rss,comm | sort -k2 -n -r | head. Здесь sort сортирует по второму столбцу, то есть по rss, числами и в обратном порядке. Тот же приём работает в Linux, если вам привычнее. Подробнее о сортировке рассказывает страница про sort и uniq.

Родительские связи видны в дереве процессов. В Linux есть ps -ef --forest или ps axjf, которые рисуют отступами, кто кого запустил. В macOS этих ключей нет, но по столбцу ppid вручную можно проследить цепочку. Если у вас установлена утилита pstree, она показывает дерево нагляднее, но в macOS её нужно ставить отдельно.

Дерево помогает, когда находится «лишний» процесс: родитель сразу подсказывает, какая служба или какое приложение его запустили.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Готовые рецепты для частых вопросов

Несколько типичных запросов, переведённых в команды. Имена и номера подставляйте свои.

  • Как давно работает процесс: ps -p 1234 -o etime=. Вывод короткий, и его легко использовать в скрипте.
  • Когда процесс запущен: ps -p 1234 -o lstart=.
  • Кто родитель процесса: ps -p 1234 -o ppid=, затем ps -p номер_родителя -o comm=.
  • Какие процессы запущены пользователем: ps -U имя -o pid,etime,comm (в Linux ключ -u тоже подойдёт, а в macOS он означает другое).
  • Сколько потоков у процесса в Linux: ps -p 1234 -o nlwp=.
  • Все процессы с их состоянием: ps -eo pid,stat,comm, это основа для поиска зависших или зомби-процессов.

Для одноразового отчёта о нагрузке сохраните вывод в файл: ps -eo pid,ppid,etime,%cpu,%mem,rss,comm > процессы.txt. Строки можно потом фильтровать через grep и awk, как описано на отдельных страницах.

О том, почему %cpu в ps не равен мгновенной загрузке, написано на странице про ps aux. Для динамики делайте несколько снимков с интервалом, например через watch, или используйте top.

Подводные камни формата -o

Первый камень: ширина столбцов. Если имя команды длинное, а терминал узкий, вывод обрезается. Чтобы увидеть полную строку запуска, добавьте ключ w в стиле BSD (повторённый -ww снимает ограничение ширины), например ps aux -ww, или перенаправьте вывод в файл или в less.

Второй: смешение стилей. Ключи вроде -eo и aux приходят из разных традиций, и сочетать их в одной команде можно не во всех реализациях. Пользуйтесь одним стилем в одной команде.

Третий: поля, которые различаются. Столбец comm в Linux усекается до 15 символов, а cmd и command содержат аргументы, в которых могут оказаться пути, имена пользователей и параметры. Поэтому, если вы публикуете вывод на форуме, проверьте его и удалите лишнее.

Четвёртый: ps делает снимок, и список процессов меняется за время вывода. Короткоживущие процессы могут не попасть в него или исчезнуть. Для наблюдения за динамикой используйте повторные замеры.

Для дальнейшей работы с состоянием STAT перейдите на страницу о состояниях процессов, а для выбора по имени откройте страницу про pgrep.

Мини-справочник по связке ps и фильтров

Если вы часто собираете данные по процессам, полезно держать несколько готовых шаблонов.

  • Крупнейшие по памяти в Linux: ps -eo pid,rss,comm --sort=-rss | head.
  • То же с сортировкой оболочкой: ps -eo pid,rss,comm | sort -k2 -n -r | head.
  • Время работы процесса: ps -p PID -o etime=.
  • Родитель процесса: ps -p PID -o ppid=.
  • Состояния всех процессов: ps -eo pid,stat,comm.

Перед использованием на другой системе проверяйте названия столбцов, потому что они бывают разными, и сверяйтесь со справкой. Так вы избежите пустых колонок и неожиданных результатов.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
psпроцессыформатирование выводаlinuxmacos

Часто задаваемые вопросы

Читайте также