Зомби - это МЕРТВЫЕ процессы. Их нельзя «убить» (вы не можете убить МЕРТВУ). Все процессы в конечном итоге умирают, и когда они это делают, они становятся зомби. Они почти не потребляют ресурсов, чего и следовало ожидать, потому что они мертвы! Причиной для зомби является то, что родитель (процесс) зомби может получить информацию о состоянии выхода из зомби и статистику использования ресурсов. Родитель сообщает операционной системе, что зомби больше не нужен, используя один из системных вызовов wait ().
Когда процесс умирает, все его дочерние процессы становятся дочерними для процесса номер 1, который является процессом init. Init - это «всегда», ожидая смерти детей, чтобы они не оставались зомби.
Если у вас есть процессы зомби, это означает, что их родители не ожидали этих зомби (посмотрите на отображаемый PPID ps -l
). У вас есть три варианта: исправить родительский процесс (заставить его ждать); убить родителя; или жить с этим. Помните, что жить с ним не так сложно, потому что зомби занимают чуть больше одной дополнительной строки в выводе ps.
Зомби можно идентифицировать в выходных данных команды Unix ps по наличию «Z» в столбце STAT. Зомби, которые существуют в течение более короткого периода времени, обычно указывают на ошибку в родительской программе. Как и в случае других утечек, присутствие нескольких зомби само по себе не вызывает беспокойства, но может указывать на проблему, которая может стать серьезной при более высоких нагрузках.
Чтобы удалить зомби из системы, сигнал SIGCHLD можно отправить родителю вручную, используя команду kill. Если родительский процесс по-прежнему отказывается пожинать зомби, следующим шагом будет удаление родительского процесса. Когда процесс теряет своего родителя, init становится его новым родителем. Init периодически выполняет системный вызов wait, чтобы пожинать зомби с init в качестве родителя.
Существуют также потерянные процессы, которые являются компьютерным процессом, родительский процесс которого завершен или завершен.
Процесс может стать осиротевшим во время удаленного вызова, когда происходит сбой клиентского процесса после выполнения запроса от сервера.
Сироты тратят впустую ресурсы сервера и потенциально могут оставить сервер в беде (Это самая большая разница в ресурсах между зомби и сиротами (за исключением случаев, когда вы видите какой-нибудь фильм о зомби-сиротах). Однако есть несколько способов решения проблемы процесса-сироты
Истребление является наиболее часто используемой техникой; в этом случае сиротский процесс убит.
Реинкарнация - это техника, при которой машины периодически пытаются найти родителей любых удаленных вычислений; в этот момент осиротевшие процессы убиты.
Истечение срока действия - это метод, при котором каждому процессу отводится определенное время для завершения, прежде чем он будет убит. В случае необходимости, процесс может «попросить» предоставить больше времени до истечения выделенного времени.
Процесс также может быть потерян, если он запущен на том же компьютере, что и его родительский процесс. В UNIX-подобной операционной системе любой потерянный процесс будет немедленно принят специальным системным процессом init. Эта операция называется переопределением и происходит автоматически. Хотя технически процесс имеет процесс init в качестве своего родителя, он все еще называется процессом-сиротой, так как процесс, который первоначально его создал, больше не существует.
Больше информации:
http://wiki.answers.com/Q/What_is_Zombie_Process_and_Orphan_Process#ixzz1PCN9vojU
http://www.linuxsa.org.au/tips/zombies.html
http://www.brighthub.com/computing/linux/articles/79186.aspx
Как определить и остановить процесс зависания, когда система зависает и медленно реагирует на ввод пользователя?
Уничтожение запущенного процесса на машине с Ubuntu удаленно с машины с Windows, которая находится в локальной сети