Описание тега zombie-process

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

Определение

В Unix и Unix-подобных компьютерных операционных системах зомби-процесс или несуществующий процесс - это процесс, который завершил выполнение (через exitсистемный вызов), но все еще имеет запись в таблице процессов: это процесс в "Завершенном состоянии". Это происходит для дочерних процессов, где запись все еще необходима, чтобы позволить родительскому процессу считывать статус выхода своего дочернего процесса: как только статус выхода считывается с помощью системного вызова ожидания, запись зомби удаляется из таблицы процессов, и говорят быть "пожнутым". Дочерний процесс всегда сначала становится зомби, а затем удаляется из таблицы ресурсов. В большинстве случаев при нормальной работе системы зомби немедленно ожидаются их родителями, а затем пожинаются системой - процессы, которые остаются зомби в течение длительного времени, обычно являются ошибкой и вызывают утечку ресурсов.

Термин " процесс зомби" происходит от общепринятого определения зомби - человек-нежить. В метафоре этого термина дочерний процесс "умер", но еще не "пожат". Кроме того, в отличие от обычных процессов,kill команда не влияет на зомби-процесс.

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

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

Запустите "ps aux" и найдите Z в столбце STAT.

Как мне удалить зомби-процессы из системы?

Что ж, сначала можно подождать. Возможно, родительский процесс намеренно оставляет процесс в состоянии зомби, чтобы гарантировать, что будущие дочерние процессы, которые он может создать, не получат тот же идентификатор pid. Или, возможно, родитель занят и на мгновение пожнет дочерний процесс.

Во-вторых, вы можете отправить родительский сигнал SIGCHLD ("kill -s SIGCHLD"). Это заставит воспитанных родителей пожинать своих детей-зомби.

Наконец, вы можете убить родительский процесс зомби. В этот момент все дочерние элементы родителя будут приняты процессом init (pid 1), который периодически запускает wait() для получения любых детей-зомби.

После удаления зомби его идентификатор процесса (PID) и запись в таблице процессов можно использовать повторно. Однако, если родитель не может позвонитьwait, зомби останется в таблице процессов, что приведет к утечке ресурсов. В некоторых ситуациях это может быть желательно - родительский процесс желает продолжать удерживать этот ресурс - например, если родительский процесс создает другой дочерний процесс, он гарантирует, что ему не будет назначен тот же PID. В современных UNIX-подобных системах (которые соответствуют спецификации SUSv3 в этом отношении) применяется следующий особый случай: если родительский элемент явно игнорирует SIGCHLD, устанавливая для своего обработчика значение SIG_IGN (а не просто игнорируя сигнал по умолчанию) или имеет флаг SA_NOCLDWAIT комплект, все детиexit информация о состоянии будет удалена, и никаких зомби-процессов не останется.

Опасности зомби-процессов:

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

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

Связанные теги

Ссылки по теме: