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

Определение

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

Термин зомби-процесс происходит от общего определения зомби - нежити. В метафоре термина «дочерний процесс» «умер», но еще не «пожинал». Кроме того, в отличие от обычных процессов, команда 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 не будут доступны для других процессов, что препятствует их запуску.

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

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

Ссылки: