С чего начать Первые шаги трек · 15 ступеней
Linux Labs

ps — список процессов

5 мин Ubuntu 24.04 · procps-ng 4.0.4

Команда ps показывает запущенные процессы: PID, владельца, состояние, загрузку CPU и памяти, команду запуска.

Шпаргалка

10 команд Версия для печати
  • ps процессы этого терминала
  • ps aux все процессы, BSD-формат
  • ps -ef все процессы, с PPID родителя
  • ps aux --sort=-%cpu | head больше всего CPU
  • ps aux --sort=-%mem | head больше всего памяти
  • ps -u student процессы пользователя
  • ps -p 1234 -o pid,stat,etime,cmd свои колонки для PID
  • ps -C nginx по имени программы
  • ps -ef --forest дерево: кто кого запустил
  • pgrep -a nginx PID и командная строка по имени

Обзор

Процесс — запущенная программа. У каждого есть номер PID, владелец, родитель (PPID) и состояние. ps (process status) печатает снимок процессов на момент запуска; живую картину обновляет top.

Без ключей ps показывает только процессы текущего терминала:

text
student@ubuntu:~$ ps
    PID TTY          TIME CMD
    812 ttyS0    00:00:00 bash
   1377 ttyS0    00:00:00 ps

Обычно смотрят все процессы. Исторически у ps два синтаксиса, и оба работают: ps aux (BSD, без минуса) и ps -ef (UNIX, с минусом).

text
student@ubuntu:~$ ps -ef | head -3
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 09:02 ?        00:00:01 /sbin/init
root           2       0  0 09:02 ?        00:00:00 [kthreadd]

Колонки: PPID — PID родителя, STIME — время запуска, TTY — терминал (? — без терминала, обычно служба), TIME — сколько процессорного времени набрал процесс, CMD — команда. Имена в квадратных скобках — потоки ядра.

ps aux вместо PPID показывает %CPU и %MEM — долю процессора и памяти, VSZ и RSS — виртуальную и реально занятую память в КиБ и STAT — состояние.

Ключи

9

Ключи с минусом (-e, -f, -u) и без (a, u, x) — разные наборы, их можно смешивать. Полный список — man ps.

Ключ Что делает Пример
aux Все процессы всех пользователей, с владельцем, CPU и памятью (BSD-синтаксис). ps aux
-ef Все процессы в полном формате, с PPID родителя (UNIX-синтаксис). ps -ef
-u user Процессы указанного пользователя. ps -u student
-p PID Только процессы с этими PID (через запятую). ps -p 1,812
-C name Процессы по имени программы. ps -C nginx
-o fields Свой набор колонок — pid, ppid, user, stat, %cpu, %mem, etime, cmd. ps -o pid,ppid,stat,cmd -p 1
--sort field Сортировать по колонке; минус — по убыванию. ps aux --sort=-%mem
--forest Нарисовать дерево родитель — потомки. ps -ef --forest
ww Не обрезать командную строку по ширине окна. ps auxww

Ничего не найдено. Попробуй запрос короче.

Рецепты

4

Что значат буквы в STAT

Буква Состояние
R работает или ждёт процессор
S спит, ждёт события
D ждёт диск или сеть, сигналы не прерывают
T остановлен (Ctrl+Z или сигнал STOP)
Z зомби: завершился, родитель не забрал код
s, +, l лидер сессии, на переднем плане, многопоточный

Найти процесс по имени без самого grep

bash
pgrep -a nginx                 # 1021 nginx: master process ...
ps aux | grep '[n]ginx'        # [n] не совпадает со строкой grep

ps aux | grep nginx находит и строку самого grep nginx — отсюда «лишний» процесс в выводе.

Свои колонки и родитель

text
student@ubuntu:~$ ps -o pid,ppid,user,stat,etime,cmd -p 1
    PID    PPID USER     STAT     ELAPSED CMD
      1       0 root     Ss         18:42 /sbin/init

etime — сколько процесс работает, ppid — PID родителя: по нему ищут, кто запустил процесс или кто не забирает зомби.

Дерево процессов службы

bash
ps -ef --forest | grep -A3 '[n]ginx: master'
systemctl status nginx         # то же дерево в разделе CGroup

Неполадки

4

Процесс ест CPU, а в ps у него немного %CPU

%CPU в ps — среднее за всю жизнь процесса, а не «сейчас». Текущую нагрузку покажет top (P сортирует по CPU).

error: user name does not exist

ps -u ждёт существующее имя или UID. Проверь имя: id имя.

Процесс в списке есть, а kill не помогает

Состояние Z — процесс уже завершён, убить его нельзя: дождись, пока родитель заберёт код, или завершай родителя. Состояние D — процесс ждёт ввода-вывода, и сигнал подействует, когда операция закончится. Подробнее — kill, processes.

Командная строка обрезана

ps подгоняет вывод под ширину окна. Полностью: ps auxww или ps -o args= -p PID.

См. также

  • pgrep — найти PID по имени или командной строке.
  • processes — что такое процессы, сигналы и приоритеты.
  • top — процессы в реальном времени.
  • kill — остановить процесс по PID.
  • system-monitoring — «сервер тормозит»: CPU, память, диск по шагам.
  • background-jobs — задачи терминала, jobs, fg, bg.
  • lsof — какие файлы и порты держит процесс.
Загрузка…