Что такое zombie
Zombie-процесс - это процесс, который уже завершился, но его родитель ещё не прочитал код завершения. Он не потребляет CPU и память, но занимает запись в таблице процессов. В ps выглядит так:
ps aux | grep Z
# или
ps -eo pid,ppid,stat,cmd | grep Z
Статус Z или Z+.
Откуда они берутся
Процесс завершился, родитель не вызвал wait() или waitpid(). Часто это баги в демонах, скриптах, самописных сервисах, иногда кривые fork-циклы.
Кто чистит зомби
Зомби может удалить только родительский процесс. Если родитель умер, зомби автоматически переподвешивается к init / systemd, и он его корректно дочищает. То есть сам зомби убить нельзя, у него уже нет кода выполнения.
Как диагностировать причину
Смотрим родителя зомби:
ps -eo pid,ppid,stat,cmd | grep Z
Если PPID не 1, значит родитель жив и неправильно обрабатывает завершение детей.
Что с этим делать
Убивать нужно родителя, а не зомби. После перезапуска или фикса родительского процесса зомби исчезнут автоматически.
Вывод
Zombie - это не утечка памяти, а утечка внимания со стороны родителя. Если зомби накапливаются - это всегда баг в коде или в управлении процессами, а не проблема ядра.
LinuxCamp | #utils
