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


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

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

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


127
2018-06-13 22:27


происхождения


Это процессы, которые хотят съесть ваш процессор;) - Luis Alvarado♦
на обед... :) - RolandiXor♦
Эти процессы мертвы, но не мешают. - Prateek Joshi
Ешь мой процессор ?! Это на самом деле ужасно! - Håvard Geithus


ответы:


Зомби - медленные процессы. Они не могут быть «убиты» (вы не можете убить 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» процесс как его родитель, он по-прежнему называется сиротским процессом, поскольку процесс, который изначально создавал его, больше не существует.

Больше информации:

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-машины, находящейся в локальной сети


151
2018-06-13 22:39



Ekhm! Вы можете убить мертвых! Вам просто нужно прицелиться в голову. Или они лгут нам все время? - Marcin Kaminski
init звонки wait на всех его дочерних процессах это, зомби, осиротевшие (принятые) и биологические (самовоспроизводящиеся)? - Bleeding Fingers
соотв. во время Второй мировой войны использовать камуфляж: P - عثمان غني
Пожалуйста, дайте медаль @MarcinKaminski! - Andrea Romagnoli


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

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


20
2018-06-14 09:36



top `скриншот в этот вопрос кажется, противоречит вам? Там зомби, похоже, использует 100% 1 процессора, но нет памяти. - Torben Gundtofte-Bruun


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

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

Они имеют completed their execution но все еще имеет entry в process table,


6
2017-10-14 16:11