Команда ps в Unix-подобных системах¶
ps (от англ. process status — состояние процесса) — утилита командной строки в Unix, Unix-подобных и POSIX-совместимых операционных системах, предназначенная для вывода списка запущенных процессов. Команда показывает идентификатор процесса (PID), родительский процесс (PPID), время выполнения, используемые ресурсы (ЦП, память) и состояние процесса. В отличие от утилиты top, обновляющей вывод в реальном времени, ps выводит снимок состояния процессов в момент вызова.
¶История и стандарты
Команда ps появилась в最早的 версиях Unix и была включена в исходный код AT&T Unix. В настоящее время существует несколько несовместимых реализаций ps, что является следствием исторического расхождения между вариантами Unix. Основные из них:
- BSD-вариант — используется в FreeBSD, OpenBSD, macOS (по умолчанию). В нём ключи указываются без дефиса:
ps aux. - SysV-вариант (UNIX-вариант) — характерен для Solaris, AIX, HP-UX. Ключи записываются с дефисом:
ps -ef. - POSIX-стандарт — определяет единый интерфейс, которому стремятся соответствовать современные реализации.
- GNU ps — часть пакета procps для Linux; поддерживает оба стиля ключей (с дефисом и без).
В Linux команда реализована в пакете procps-ng и читает информацию из виртуальной файловой системы /proc, где для каждого процесса создаётся каталог с его идентификатором.
¶Основные параметры
Самые распространённые ключи ps (в независимости от варианта):
| Ключ | BSD-стиль | SysV-стиль | Назначение |
|---|---|---|---|
| Все процессы | a | -e | Показывать процессы всех пользователей, а не только текущего |
| Полный список | x | — | Включать процессы, не управляющиеся терминалом (демоны) |
| Полный формат | u | -f | Расширенный вывод с информацией о пользователе, ресурсах |
| Формат | ww | -o | Не обрезать широкие столбцы / задать свой формат вывода |
| По PID | — | -p | Показать конкретный процесс по номеру |
| По имени | — | -C | Отфильтровать по имени команды |
| Дерево | -f (в ps -ef --forest) | --forest | Визуализировать иерархию процессов |
Пример типичного вызова в Linux:
`` ps aux ``
Вывод содержит столбцы: USER (владелец), PID, %CPU, %MEM, VSZ (виртуальная память), RSS (резидентная память), TTY, STAT (состояние), START, TIME и COMMAND (команда).
¶Состояния процессов
Столбец STAT отражает текущее состояние процесса. Основные обозначения:
- R — выполняется или готов к выполнению (running / runnable);
- S — спит, ожидает завершения события (interruptible sleep);
- D — спит в состоянии, не допускающем прерывания (обычно ожидает ввода-вывода);
- Z — зомби: процесс завершился, но родитель не прочитал его код завершения;
- T — остановлен сигналом (например, Ctrl+Z);
- < — процесс выполняется с повышенным приоритетом (realtime);
- N — процесс с пониженным приоритетом.
¶Примеры использования
Показать все процессы текущего пользователя в понятном виде:
`` ps -u $USER ``
Найти процесс по имени:
`` ps -C nginx ``
Показать дерево процессов:
`` ps -ef --forest ``
Вывести только PID и команду в пользовательском формате:
`` ps -eo pid,comm --no-headers ``
Получить PID процесса для передачи в другую команду (например, kill):
`` kill $(pgrep -f "python3 script.py") ``
¶ps и /proc
В Linux утилита ps не запрашивает ядро напрямую, а читает данные из каталога /proc. Каждый запущенный процесс представлен каталогом /proc/<PID>, внутри которого находятся файлы status, cmdline, stat, maps и другие. Это позволяет получить ту же информацию и без ps — например, командой cat /proc/1234/status. Достоинство ps — удобный форматирование и фильтрация, недостаток — снимок процессов фиксирован в момент вызова.
¶Связанные утилиты
Для мониторинга процессов в Linux наряду с ps используются:
- top и htop — интерактивный вывод с периодическим обновлением;
- pgrep — поиск процессов по имени и вывод их PID;
- pstree — отображение дерева процессов;
- pidof — получение PID процесса по имени программы.
¶Применение
ps применяется в системном администрировании для диагностики зависших процессов, поиска утечек памяти, мониторинга нагрузки на сервер, а также в скриптах для автоматизации (например, для остановки процессов, превысивших лимит ресурсов). Команда входит в обязательный набор утилит POSIX и доступна практически в любой Unix-системе.
¶Источники
- Linux man-pages project — страница руководства
ps(1) - procps-ng documentation
- POSIX.1-2017, раздел XBD «ps — process status»
- «UNIX и Linux: полное руководство» М. Г. Соболя
