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