Что такое утилита ps в Linux?

Ответ

ps (process status) — это стандартная консольная утилита для отображения снимка информации о текущих запущенных процессах. В отличие от top или htop, она не обновляет данные в реальном времени, а показывает состояние на момент выполнения команды.

Наиболее часто используемые форматы вызова:

  1. ps aux — BSD-стиль. Показывает все процессы всех пользователей с детализацией.

    • a — процессы всех пользователей.
    • u — пользователь-ориентированный формат (показывает USER, %CPU, %MEM).
    • x — включает процессы без управляющего терминала (демоны).
  2. ps -ef — UNIX/SysV-стиль. Более стандартизированный, компактный вывод.

    • -e — все процессы.
    • -f — полный формат (показывает UID, PID, PPID, время запуска).

Пример вывода ps aux | head -5:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 169316 13056 ?        Ss   Feb01   0:08 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Feb01   0:00 [kthreadd]
www-data   745  0.0  0.2 321000 22500 ?        S    Feb01   0:15 nginx: worker process

Практическое применение:

  • Поиск процесса: ps aux | grep nginx
  • Просмотр дерева процессов: ps auxf или ps -ef --forest
  • Кастомный формат вывода: ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -10 (топ-10 процессов по потреблению памяти).
  • Проверка PID по имени: pgrep nginx или pidof nginx (альтернативы).

Ключевые поля вывода: PID (идентификатор), PPID (родительский PID), %CPU/%MEM (нагрузка), VSZ (виртуальная память), RSS (резидентная память), STAT (статус процесса, например, S — спящий, R — запущенный, Z — зомби), COMMAND (команда запуска).

Ответ 18+ 🔞

А, ну это же классика, ёпта! ps — это как твой личный стукач в системе, который на раз-два сливает всю подноготную про то, какие процессы тут без дела шастают. Не то что эти top с их анимацией — тут всё чётко, по делу, один снимок и в дамки.

Самые ходовые комбинации, чтобы не выглядеть конём:

  1. ps aux — стиль BSD, для тех, кто любит подробности. Показывает всё и про всех.

    • a — процессы от всех юзеров, даже от того полупидора, который сидит на соседнем сервере.
    • u — формат «для пользователя», чтобы видно было, кто сколько CPU и памяти хавает.
    • x — подтягивает демонов и прочую нечисть, которая без терминала прячется.
  2. ps -ef — стиль UNIX, более строгий и лаконичный. Как будто отчёт бухгалтера, без лишней воды.

    • -e — опять же, все процессы.
    • -f — полный формат, где видно кто кого породил (PPID — это ж родительский PID, ясень пень).

Вот, смотри, как это выглядит в жизни (ps aux | head -5):

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 169316 13056 ?        Ss   Feb01   0:08 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Feb01   0:00 [kthreadd]
www-data   745  0.0  0.2 321000 22500 ?        S    Feb01   0:15 nginx: worker process

А теперь, где это реально впаривают:

  • Найти того, кто всё сожрал: ps aux | grep nginx — и вот он, падла, прямо перед тобой.
  • Увидеть генеалогическое древо бардака: ps auxf или ps -ef --forest. Прямо как в сериале — кто от кого пошёл, вся иерархия.
  • Свой, кастомный отчёт, чтоб всё по полочкам: ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -10. Это топ-10 обжор по памяти, сразу видно, кого первым убивать.
  • Просто узнать PID, без всей этой пурги: pgrep nginx или pidof nginx. Быстро и без соплей.

Расшифровываем поля, а то нихуя не понятно: PID — номерок, как в тюрьме. PPID — номер его папаши. %CPU/%MEM — насколько он жаден. VSZ — сколько виртуальной памяти нарисовал, RSS — сколько реально жрёт. STAT — статус: S спит, R бегает, Z — зомби, ходячий мертвец, который уже помер, но папаша про это не знает. COMMAND — собственно, что за команда эту всю вечеринку устроила.

В общем, инструмент простой, но овердохуища полезный. Запомни эти флаги, и волнение ебать пропадёт, когда система снова начнёт тупить.