Разберём основные состояния процессов в Linux простым языком - от «обычных» до самых редких.
🔂R - Running / Runnable
Процесс работает или готов работать.
Стоит в очереди планировщика и может быть выполнен прямо сейчас.
Чаще всего это самые «живые» процессы в системе.
🔂S - Interruptible Sleep
Обычный сон.
Процесс ждёт событие: ввод, сокет, системный вызов, таймер.
Главное:
🟢может быть прерван любым сигналом
🟢безопасен
🟢встречается чаще всего
🔂D - Uninterruptible Sleep (ожидание I/O)
Тот самый «неубиваемый» процесс. Это сон внутри ядра, когда процесс ждёт завершения операции I/O.
Например:
🟢зависший диск
🟢NFS / SMB недоступны
🟢драйвер «залип»
Почему нельзя убить:
🟢процесс в ядре
🟢сигналы до него просто не доходят
🟢SIGKILL бесполезен
Обычно лечится:
🟢фиксом железа
🟢восстановлением сети
🟢в худшем случае - перезагрузкой
🔂Z - Zombie
Процесс уже умер, но его родитель не сделал
wait() и не забрал код завершения.Особенности:
🟢ресурсов не занимает
🟢убивать нечего
🟢исчезает, когда родитель вызовет wait() или завершится сам
Если зомбиков много - ищите кривой родительский процесс.
🔂T - Traced / Stopped
Процесс остановлен:
🟢
Ctrl+Z🟢
SIGSTOP🟢отладчиком (
ptrace)Он не выполняется, но жив и ждет продолжения.
🔂I - Idle (Kernel Thread)
Означает, что это поток ядра, который не спит и не выполняется, а «ждёт» работы.
Обычно встречается у kthread’ов.
🔂W - Paging (устаревшее)
Старое состояние, почти не используется в современных ядрах.
Обозначало процесс, который ждал подкачку страниц памяти.
🔂K - Wakekill
Процесс может быть прерван только «фатальным» сигналом, когда система убивает всё подряд (например, при OOM).
В обычной работе почти не встречается.
🔂X - Dead
Процесс «мертв», но ещё не удалён из таблицы процессов.
Редкое и кратковременное состояние.