Открыть сервисСервис

Команда 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: полное руководство» М. Г. Соболя
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru