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

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

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

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

138
задан 11 April 2013 в 18:56

4 ответа

Зомби являются МЕРТВЫМИ процессами. Они не могут быть 'уничтожением' (Вы не можете уничтожить МЕРТВЫХ). Все процессы в конечном счете умирают, и когда они делают они становятся зомби. Они не используют почти ресурсов, который должен ожидаться, потому что они мертвы! Причиной для зомби является так родитель зомби (процесс), может получить статус выхода зомби и статистику использования ресурсов. Родитель сигнализирует об операционной системе, что этому больше не нужен зомби при помощи одного из ожидания () системные вызовы.

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

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

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

Для удаления зомби из системы сигнал SIGCHLD может быть отправлен в родителя вручную, с помощью команды уничтожения. Если бы родительский процесс все еще отказывается пожинать зомби, следующий шаг должен был бы удалить родительский процесс. Когда процесс теряет своего родителя, init становится своим новым родителем. Init периодически выполняет системный вызов ожидания для жатвы любых зомби с 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 удаленно от машины окон, которая находится в LAN

162
ответ дан 22 November 2019 в 22:54

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

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

20
ответ дан 22 November 2019 в 22:54

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

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

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

7
ответ дан 22 November 2019 в 22:54

Процессы-зомби являются процессами, которые прекратили работать, но их запись таблицы процессов все еще существует, потому что родительский процесс не получил ее через ожидание syscall. Технически каждый процесс, который завершается, является зомби в течение очень короткого промежутка времени, но они могли жить для дольше.

Дольше жил, процессы-зомби происходят, когда родительские процессы не называют ожидание syscall после того, как дочерний процесс закончился. Одна ситуация, где это происходит, состоит в том, когда родительский процесс плохо записан и просто опускает вызов ожидания или когда родительский процесс умирает перед ребенком и новым родительским процессом не звонит, ожидают на нем. Когда родитель процесса умирает перед ребенком ОС присваивает дочерний процесс процессу "init" или PID 1. т.е. процесс init "принимает" дочерний процесс и становится его родителем. Это означает, что теперь, когда дочерний процесс выходит из нового родителя (init) должен звонить, waitto получают его код выхода, или его запись таблицы процессов остается навсегда, и это становится зомби

1
ответ дан 22 November 2019 в 22:54

Другие вопросы по тегам:

Похожие вопросы: