Зомби (состояние Z в ps) — это завершившиеся процессы, которые всё ещё присутствуют в таблице процессов. Они ждут, пока родитель прочитает их код возврата через системный вызов
wait(). После этого запись о процессе исчезает.👻 Чем опасны?
Сами по себе зомби не потребляют ресурсы (CPU, память), но занимают слот в таблице процессов. Если родительский процесс никогда не вызывает
wait(), зомби накапливаются. Когда таблица процессов заполняется, система перестаёт создавать новые процессы — это может привести к отказу сервисов. Кроме того, большое число зомби — явный признак бага в родительском приложении.👻 Как найти?
Самый простой способ — использовать
ps -eal или aux и grep состояние Z:
ps aux | grep ' Z '
Более детальный вывод с информацией о родителе:
ps -eal | awk '{ if ($2 == "Z") print $4, $14 }'
Здесь $2 — код состояния, $4 — PID, $14 — имя процесса.
✅ Как избавиться?
Если зомби уже есть, можно попробовать:
— Отправить сигнал
SIGCHLD родителю (не всегда помогает, так как родитель может игнорировать сигналы).— Завершить родительский процесс (если это возможно).
— Перезапустить сервис, который порождает зомби.
⚠️ Главное — не убивать зомби напрямую (kill -9 на PID зомби не работает, потому что процесс уже мёртв). Устранять нужно причину — родительский процесс.
Зомби-процессы — не страшно, если их немного. Но если их количество растёт, это повод заглянуть в код приложения и проверить, правильно ли оно обрабатывает завершение дочерних процессов.
#линуксятина
