Что такое зомби-процессы?

123

С такими командами, как top и gui based System Monitor , я вижу, что на данный момент у меня есть несколько процессов зомби.

Что такое зомби-процессы?

Они влияют на производительность системы или приложения, которым они зомби. Они используют слишком много памяти или памяти вообще?

    
задан Jesper 13.06.2011 в 22:27
источник

3 ответа

145

Зомби - это DEAD-процессы. Они не могут быть "убиты" (вы не можете убить DEAD). Все процессы в конечном счете умирают, и когда они делают, они становятся зомби. Они не потребляют почти никаких ресурсов, чего можно ожидать, потому что они мертвы! Причина зомби в том, что родитель (процесс) зомби может получить статус выхода зомби и статистику использования ресурсов. Родитель сигнализирует операционной системе, что он больше не нуждается в зомби, используя один из системных вызовов wait ().

Когда процесс умирает, его дочерние процессы становятся потомками процесса номер 1, который является процессом init. Init - это "всегда", ожидая, что дети умрут, чтобы они не оставались зомби.

Если у вас есть процессы с зомби, это означает, что их зомби не ждут их родители (посмотрите на PPID, отображаемый ps -l ). У вас есть три варианта: исправить родительский процесс (заставить его подождать); убить родителя; или жить с ним. Помните, что жить с ним не так сложно, потому что зомби занимают не более одной дополнительной строки на выходе ps.

Зомби могут быть идентифицированы на выходе команды Unix ps наличием "Z" в столбце STAT. Зомби, которые существуют более чем на короткий период времени, обычно указывают на ошибку в родительской программе. Как и в случае других утечек, присутствие нескольких зомби само по себе не вызывает беспокойства, но может указывать на проблему, которая может стать серьезной при более тяжелых нагрузках.

Чтобы удалить зомби из системы, сигнал SIGCHLD может быть отправлен родителю вручную, используя команду kill. Если родительский процесс все еще отказывается пожинать зомби, следующим шагом будет удаление родительского процесса. Когда процесс теряет родителя, init становится его новым родителем. Init периодически выполняет системный вызов wait, чтобы пожинать всех зомби с init как родительский.

Существуют также сиротские процессы , которые являются компьютерным процессом, родительский процесс которого завершен или завершен.

Процесс может стать сиротой во время удаленного вызова, когда клиентский процесс вылетает после запроса сервера.

Сироты тратят ресурсы сервера и могут потенциально оставить сервер в беде (это самая большая разница в ресурсах между зомби и сиротами (кроме случаев, когда вы видите какой-то сиротский зомби-фильм). Однако есть несколько решений проблемы с сиротским процессом:

  1. Истребление - наиболее часто используемый метод; в этом случае сиротский процесс убит.

  2. Реинкарнация - это метод, при котором машины периодически пытаются найти родителей для любых удаленных вычислений; после чего погибают осиротевшие процессы.

  3. Истечение срока - это метод, при котором каждому процессу выделяется определенное количество времени, чтобы закончить, прежде чем быть убитым. Если необходимо, процесс может "запросить" больше времени для завершения до истечения отведенного времени.

Процесс можно также осиротеть на том же компьютере, что и его родительский процесс. В UNIX-подобной операционной системе любой сиротский процесс будет немедленно принят специальным системным процессом "init". Эта операция называется переустановкой и происходит автоматически. Несмотря на то, что технически процесс имеет "init" процесс как его родительский элемент, он по-прежнему называется сиротским процессом, поскольку процесс, изначально создавший его, больше не существует.

Дополнительная информация:

Ссылка

Ссылка

Ссылка

Как определить и убить процесс подвески, когда система зависает и медленно реагирует на ввод пользователя?

Убийство запуск процесса на машине Ubuntu удаленно с Windows-машины, находящейся в локальной сети

    
ответ дан Luis Alvarado 13.06.2011 в 22:39
источник
19

Процессы зомби (также показаны как <defunct> ), вообще не являются реальными процессами. Это просто записи в таблице процессов ядра. Это единственный ресурс, который они потребляют. Они не потребляют процессор или оперативную память. Единственная опасность иметь зомби, заканчивается в таблице процессов (вы можете использовать cat /proc/sys/kernel/threads-max , чтобы узнать, сколько записей разрешено в вашей системе).

Они появляются только тогда, когда их родительский процесс (т. е. процесс, который fork()'ed them) жив, но еще не вызвал системную функцию wait() . Когда родитель умирает, зомби составляют wait()'ed за init и исчезают.     

ответ дан vartec 14.06.2011 в 09:36
6

Когда child process завершается, его смерть сообщается его родителям, чтобы родитель мог предпринять соответствующие действия.

A process , который ожидает, когда его родитель примет код возврата , называется процессом зомби .

У них completed their execution , но у entry % %__%%.

    
ответ дан Prateek Joshi 14.10.2015 в 16:11