← Весь справочник

ps

Список процессов — PID, родитель, владелец, память, CPU, состояние и полная командная строка

ps делает снимок процессов в момент запуска и печатает таблицу. В отличие от top, он не обновляется — зато его вывод удобно фильтровать и разбирать в скриптах.

Синтаксис

ps [опции]

У ps из procps два стиля опций, и их можно смешивать: UNIX — с дефисом (ps -ef), BSD — без дефиса (ps aux). Одна и та же буква в них значит разное: ps -a и ps a — не одно и то же. Без опций ps показывает только процессы текущего терминала.

Какие процессы показать

ОпцияЧто выбирает
-e / -Aвсе процессы
axвсе процессы (BSD-стиль; a — всех пользователей, x — и без терминала)
-p 1,42 / p 42по PID
-C имяпо имени исполняемого файла (точное совпадение, без пути)
-u пользовательпо эффективному пользователю; -U — по реальному
-g / --sid / -sпо группе процессов / по сессии
--ppid 1дети указанного процесса
-t pts/0по терминалу
-Nинвертировать выборку

Что показать

ОпцияЧто делает
-fполный формат: UID PID PPID C STIME TTY TIME CMD
-Fещё полнее: плюс SZ RSS PSR
u«пользовательский» BSD-формат: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
-lдлинный формат с F S PRI NI WCHAN
-o поле,полесвои колонки; -o pid= — без заголовка; -o user:20 — ширина колонки
-O полестандартные колонки плюс указанные
--no-headers / hбез строки заголовка
--sort=-%mem,pidсортировка; - перед полем — по убыванию
--forest / fдерево процессов (отступы и \_)
-Hиерархия отступами
-L / -Tпоказать потоки (колонки LWP/SPID, NLWP)
ww / -wwне обрезать длинные командные строки

Колонки

Колонка (-o имя)Что значит
PID (pid), PPID (ppid)ID процесса и его родителя
USER/UID (user, uid)владелец (эффективный)
%CPU (%cpu)доля CPU в среднем за всё время жизни процесса, а не «сейчас»
%MEM (%mem)доля физической памяти (по RSS)
RSS (rss)занятая физическая память, КиБ
VSZ (vsz)виртуальная память, КиБ (включая не загруженное)
TTY (tty)терминал; ? — процесс без терминала (демон)
STAT (stat)состояние, см. ниже
START/STIME (start, stime)время запуска; lstart — полная дата
ELAPSED (etime, etimes)сколько процесс живёт: [[дд-]чч:]мм:сс / в секундах
TIME (time)суммарное процессорное время
NI (ni), PRI (pri)nice (−20…19) и приоритет
CMD/COMMAND (cmd, args)полная командная строка; comm — только имя (до 15 символов)
WCHAN (wchan)функция ядра, в которой процесс спит
NLWP (nlwp)число потоков

Коды STAT

КодЗначение
Rвыполняется или готов к выполнению
Sспит, ждёт события (обычное состояние)
Dнепрерываемый сон — обычно ждёт диск или сеть; сигналы, даже KILL, не действуют до выхода из него
Zзомби <defunct>: завершился, но родитель ещё не забрал код возврата
T / tостановлен (SIGSTOP, Ctrl+Z) / остановлен отладчиком
Iпростаивающий поток ядра
sлидер сессии
< / Nвысокий / низкий приоритет (nice)
lмногопоточный
+в группе переднего плана терминала

Примеры

# все процессы, два классических варианта
ps aux
ps -ef

# свои колонки, сортировка по памяти, первые 10
ps -eo pid,ppid,user,%mem,rss,cmd --sort=-%mem | head -n 11

# процессы с именем nginx
ps -C nginx -o pid,ppid,stat,cmd

# только PID, без заголовка — для подстановки в скрипт
ps -C cron -o pid=

# кто родитель процесса и когда он запущен
ps -o ppid=,lstart= -p 1234

# дерево процессов
ps -ef --forest
ps axf -o pid,args

# дети процесса 1
ps --ppid 1 -o pid,cmd

# зомби
ps -eo pid,ppid,stat,cmd | awk '$3 ~ /^Z/'

# сколько секунд живёт процесс
ps -o etimes= -p 1234

# grep по списку без строки самого grep
ps aux | grep '[n]ginx'

Подводные камни

  • ps aux | grep имя находит и сам grep. Используй pgrep, ps -C имя или трюк с квадратными скобками: grep '[n]ginx'.
  • %CPU — среднее за жизнь процесса. Процесс, который только что начал грузить CPU, может показывать 0.5%. Текущую нагрузку смотри в top.
  • -C ищет по имени исполняемого файла, а не по аргументам: ps -C python3 найдёт скрипты на Python, но ps -C myscript.py — нет. Для аргументов — pgrep -f.
  • comm обрезается до 15 символов, а имя можно подменить. Полная строка — в args/cmd.
  • Зомби не убить kill-ом: он уже мёртв. Исчезнет, когда родитель вызовет wait или сам завершится.
  • Вывод — снимок. Между ps и следующей командой процесс может завершиться, а его PID — достаться другому.
  • BSD- и UNIX-опции различаются: ps -u root — процессы пользователя root, а ps u — формат вывода.

См. также

pgrep · kill · proc · grep