Короткий ответ
Зомби-процесс — завершившийся процесс, запись о котором (код завершения) ещё не была считана родительским процессом через системный вызов wait(); он возникает, когда родитель не вызывает wait/waitpid вовремя или вообще.
Как это работает подробнее
После завершения процесса ядро сохраняет минимальную запись в таблице процессов (PID, код возврата) до тех пор, пока родитель не заберёт эту информацию; если родитель этого не делает, запись остаётся в состоянии Z (zombie) в выводе ps.
Пример кода
commands.sh
ps aux | awk '$8 ~ /Z/ {print}'Что использовать на практике
- Практика. единичные кратковременные зомби — это нормально и не требуют действий, а накопление множества зомби говорит о баге в родительском процессе, который не обрабатывает завершение дочерних процессов; зомби сами по себе не занимают память, но исчерпывают таблицу PID.
Подводные камни
- Риск. Частая ошибка — пытаться «убить» зомби сигналом kill: это бесполезно, так как процесс уже мёртв, нужно разбираться с родительским процессом (перезапустить его либо исправить код, чтобы он вызывал wait()).