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

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

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

Существуют определенные случаи, когда существование процесса зомби может быть преднамеренным или даже желательным. После того, как дочерний процесс прекратил выполнение, родительский может позже запустить другой экземпляр той же программы. Если зомби не был удален из таблицы процессов, новому ребенку не будет присвоен такой же идентификатор (ID), как у старого ребенка. Некоторые программы могут выиграть или даже потребовать такого рода дифференциации.

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

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

ДРУГИЕ ЯЗЫКИ

Помогла ли вам эта статья? Спасибо за ответ Спасибо за ответ

Как мы можем помочь? Как мы можем помочь?