linux processes

ps

Список процессов — вывод снимка текущих процессов

Описание

ps (process status) — утилита для вывода информации о запущенных процессах. Команда делает моментальный снимок состояния процессов в момент вызова и отображает такие атрибуты, как PID, состояние, использование CPU и памяти, пользователь-владелец и командная строка запуска.

Команда появилась ещё в ранних версиях Unix и унаследована всеми Unix-подобными системами. В Linux реализация ps из пакета procps-ng читает данные из псевдофайловой системы /proc, поэтому не требует привилегий для просмотра собственных процессов. Для просмотра чужих процессов достаточно обычных прав, но ряд полей (например, аргументы командной строки) может быть скрыт.

Используйте ps, когда нужен статический снимок: найти PID конкретного процесса, проверить статус демона, получить дерево процессов для отладки. Для динамического мониторинга используйте top или htop.

Синтаксис

ps [options]

ps поддерживает три стиля опций:

ps aux # a — показать процессы всех пользователей (BSD) # u — вывод в user-oriented формате # x — включить процессы без управляющего терминала
ps -ef # -e — выбрать все процессы (эквивалент -A) # -f — полный формат (full-format listing)

Флаги и опции

ФлагОписание
-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Показать дерево процессов в иерархическом виде
--forestASCII-дерево дочерних процессов (лучше читаемое, чем -H)
a (BSD)Показать процессы всех пользователей с терминалом
u (BSD)User-ориентированный формат: USER, PID, %CPU, %MEM, VSZ, RSS
x (BSD)Включить процессы без управляющего терминала (демоны)
-wwНе обрезать длинные командные строки (wide output)

Ключевые поля вывода:

ПолеЗначение
PIDИдентификатор процесса
PPIDPID родительского процесса
%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 vs ps -ef
Оба варианта показывают все процессы, но ps aux (BSD) добавляет поля %CPU и %MEM, удобные для быстрой диагностики нагрузки. ps -ef (UNIX) показывает PPID и время старта STIME. Используйте ps auxf чтобы получить и то, и другое, плюс дерево процессов.
Совет: мгновенный снимок vs мониторинг
ps делает снимок один раз. Для наблюдения за изменениями используйте watch -n 1 'ps aux --sort=-%cpu | head -15' или переключитесь на top/htop с интерактивным обновлением.
Внимание: %CPU в ps — это среднее, не мгновенное значение
Поле %CPU в выводе ps — усреднённое значение за всё время жизни процесса. Только что запущенный процесс, интенсивно нагружающий CPU, может показывать низкий процент. Для мгновенной нагрузки используйте top.
Внимание: grep + ps захватывает сам себя
Команда ps aux | grep nginx в выводе покажет и строку самого процесса grep. Чтобы исключить её, используйте ps aux | grep '[n]ginx' или pgrep nginx.