ps
Отображает информацию о процессах, выполняющихся в системе.
ps -eo pid,ppid,comm,stat
PID PPID COMMAND STAT
1 0 systemd Ss
2 0 kthreadd S
3 2 rcu_gp I<
⚙️ Основные состояния процесса
- R : Running (выполняющийся): процесс выполняется на CPU или находится в очереди готовности планировщика. В этом состоянии процесс имеет активный контекст и может быть прерван только по расписанию или системным событиям.
- S : Interruptible Sleep (прерываемый сон): процесс временно приостановлен и ожидает события, например завершения операции ввода-вывода. Может быть пробуждён сигналом. Это наиболее частое состояние процессов в пользовательском пространстве.
- D : Uninterruptible Sleep (непрерываемое ожидание): процесс ожидает завершения критической операции ядра, обычно связанной с диском, сетью или устройством. В этом состоянии процесс не может быть прерван сигналами, что предотвращает неконсистентность данных.
- T : Stopped (остановленный): процесс приостановлен пользователем (SIGSTOP, SIGTSTP) или системой, например при отладке. Его выполнение может быть возобновлено без потери контекста.
- Z : Zombie (зомби-процесс): процесс завершил выполнение, но запись о нём остаётся в таблице процессов до тех пор, пока родитель не считает его статус с помощью системного вызова wait(). Зомби не используют ресурсы CPU или памяти.
- I : Idle (неактивный): внутреннее состояние потоков ядра, которые не участвуют в пользовательском планировании. Используется только для системных задач и не наблюдается у обычных процессов.
- X : Dead (мёртвый): завершённое и полностью очищенное состояние процесса. Обычно невидимо пользователю, так как процесс удалён из таблицы задач ядра.
🧩 Дополнительные флаги состояния
Дополнительные буквы, отображающиеся рядом с основным состоянием в ps , уточняют характеристики процесса:
- s : Session Leader: процесс является лидером сессии и управляет группой процессов.
- l : Multithreaded: процесс многопоточный, использует POSIX Threads (вызов clone()).
- < : High Priority: процесс выполняется с повышенным приоритетом (nice < 0).
- N : Low Priority: процесс выполняется с пониженным приоритетом (nice > 0).
- L : Locked Pages: процесс удерживает страницы в оперативной памяти, запрещая их выгрузку на диск.
- + : Foreground: процесс взаимодействует с управляющим терминалом (foreground).
🧩 Схема переходов состояний
A[Создание процесса] --> R[Running]
R --> S[Sleeping]
R --> D[Uninterruptible Sleep]
S --> R
D --> R
R --> T[Stopped]
T --> R
R --> Z[Zombie]
Z --> X[Dead]
Если родительский процесс не вызывает wait() и продолжает выполняться, завершённый потомок остаётся в таблице процессов ядра в состоянии defunct.
Ядро не может удалить запись самостоятельно, поскольку по стандарту POSIX это обязанность родителя.
Зомби не выполняется и не использует оперативную память, но удерживает структуру task_struct и PID, что при накоплении может привести к исчерпанию таблицы процессов и ошибкам fork().
Очистка происходит только после завершения родителя, когда ядро переназначает зомби демону systemd, вызывающему wait() и удаляющему их из системы.