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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

У них есть completed their execution но все еще имеет entry в process table.

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

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

Это процессы, которые хотят съесть ваш процессор :wink:

на обед… :slight_smile:

Эти процессы мертвы, но не похоронены .

Съесть мой процессор?! Это на самом деле ужасно!