ps
Список процессов — вывод снимка текущих процессов
Описание
ps (process status) — утилита для вывода информации о запущенных процессах. Команда делает моментальный снимок состояния процессов в момент вызова и отображает такие атрибуты, как PID, состояние, использование CPU и памяти, пользователь-владелец и командная строка запуска.
Команда появилась ещё в ранних версиях Unix и унаследована всеми Unix-подобными системами. В Linux реализация ps из пакета procps-ng читает данные из псевдофайловой системы /proc, поэтому не требует привилегий для просмотра собственных процессов. Для просмотра чужих процессов достаточно обычных прав, но ряд полей (например, аргументы командной строки) может быть скрыт.
Используйте ps, когда нужен статический снимок: найти PID конкретного процесса, проверить статус демона, получить дерево процессов для отладки. Для динамического мониторинга используйте top или htop.
Синтаксис
ps поддерживает три стиля опций:
- UNIX-стиль — однобуквенные опции с дефисом:
ps -ef - BSD-стиль — однобуквенные опции без дефиса:
ps aux - GNU long-стиль — длинные опции с двойным дефисом:
ps --pid 1234
Флаги и опции
| Флаг | Описание |
|---|---|
-e / -A | Выбрать все процессы (все пользователи, все терминалы) |
-f | Полный формат: UID, PID, PPID, C, STIME, TTY, TIME, CMD |
-l | Длинный формат: добавляет поля F, S, PRI, NI, ADDR, SZ, WCHAN |
-u user | Выбрать процессы конкретного пользователя (по имени или UID) |
-p pid | Выбрать процессы по PID (можно перечислить через запятую) |
-C name | Выбрать процессы по имени команды (без пути) |
-o format | Задать пользовательский формат вывода (pid,comm,%cpu,%mem и др.) |
--sort key | Сортировка вывода по ключу (-%cpu, -%mem, pid) |
-H | Показать дерево процессов в иерархическом виде |
--forest | ASCII-дерево дочерних процессов (лучше читаемое, чем -H) |
a (BSD) | Показать процессы всех пользователей с терминалом |
u (BSD) | User-ориентированный формат: USER, PID, %CPU, %MEM, VSZ, RSS |
x (BSD) | Включить процессы без управляющего терминала (демоны) |
-ww | Не обрезать длинные командные строки (wide output) |
Ключевые поля вывода:
| Поле | Значение |
|---|---|
PID | Идентификатор процесса |
PPID | PID родительского процесса |
%CPU | Процент использования CPU (усреднённый) |
%MEM | Процент использования физической памяти |
VSZ | Виртуальный размер процесса в KB |
RSS | Резидентный размер в памяти (реально используемая RAM) в KB |
STAT | Код состояния: R=running, S=sleeping, Z=zombie, T=stopped |
TTY | Управляющий терминал (? — без терминала, демон) |
Паттерны использования
Найти процесс по имени
# Вариант 1: через grep ps aux | grep nginx # Вариант 2: без grep ps -C nginx # Вариант 3: получить только PID ps -C nginx -o pid=
Все процессы с полной информацией
# UNIX-стиль: все процессы, полный формат ps -ef # BSD-стиль: все процессы с %CPU/%MEM ps aux # Отсортировать по CPU (убывание) ps aux --sort=-%cpu | head -10
Дерево процессов
# ASCII-дерево всех процессов ps --forest -e # Дерево конкретного процесса и его детей ps --forest -p $(pgrep -d, bash) # Альтернатива: pstree (если установлен) pstree -p
Пользовательский формат
# Только нужные поля ps -eo pid,ppid,user,%cpu,%mem,comm # Топ-5 процессов по памяти ps -eo pid,user,%mem,comm \ --sort=-%mem | head -6 # Время старта процессов ps -eo pid,comm,lstart
Процессы конкретного пользователя
# По имени пользователя ps -u www-data # Расширенный вывод ps -fu www-data # Только PID-ы (для скриптов) ps -u deploy -o pid=
Поиск зомби-процессов
# Найти все зомби (stat = Z)
ps aux | awk '$8 == "Z"'
# Через -o со статусом
ps -eo pid,ppid,stat,comm \
| grep '^.\{0,\} Z'
# Показать родителя зомби
ps -eo pid,ppid,stat,comm | grep Z
Советы и предупреждения
Оба варианта показывают все процессы, но
ps aux (BSD) добавляет поля %CPU и %MEM, удобные для быстрой диагностики нагрузки. ps -ef (UNIX) показывает PPID и время старта STIME. Используйте ps auxf чтобы получить и то, и другое, плюс дерево процессов.
ps делает снимок один раз. Для наблюдения за изменениями используйте watch -n 1 'ps aux --sort=-%cpu | head -15' или переключитесь на top/htop с интерактивным обновлением.
Поле
%CPU в выводе ps — усреднённое значение за всё время жизни процесса. Только что запущенный процесс, интенсивно нагружающий CPU, может показывать низкий процент. Для мгновенной нагрузки используйте top.
Команда
ps aux | grep nginx в выводе покажет и строку самого процесса grep. Чтобы исключить её, используйте ps aux | grep '[n]ginx' или pgrep nginx.