Подтвердить что ты не робот

Процесс зомби против сиротского процесса

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

Что касается управления памятью и таблицы процессов, как эти процессы обрабатываются по-разному, особенно в UNIX?

Каков пример или крайний случай, когда создание зомби или сирот может нанести ущерб большему приложению или системе?

4b9b3361

Ответ 1

Когда дочерний элемент выходит из системы, некоторый процесс должен wait на нем получить код выхода. Этот код выхода хранится в таблице процессов до тех пор, пока это не произойдет. Акт чтения этого кода выхода называется "пожинать" ребенка. Между тем, когда ребенок выходит и собирается, он называется зомби. (Вся номенклатура немного ужасна, когда вы об этом думаете, я не рекомендую слишком много думать об этом.)

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

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

init автоматически пожинает своих детей (принято или иным образом). Поэтому, если вы выйдете, не убрав своих детей, тогда они не станут зомби (по крайней мере, не более чем на мгновение).

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

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

Ответ 2

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

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

Источник: понятия операционной системы Авраама, Питера, Грега

Ответ 3

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

Ответ 4

  • Нет сирот, но процесс с использованием PID 1.

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

  • Каждый процесс проходит через какое-то состояние зомби, когда заканчивается, а именно фаза между объявлением ее конца, выдавая SIGCHLD и подтверждая свою обработку (доставку или незнание).

Когда введено состояние зомби, процесс - это всего лишь запись в списке системных процессов.

Единственным значительным ресурсом, который использует зомби, является действительный PID.

Ответ 5

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

Ответ 6

Сирота - Выход из родительского процесса, процесс Init становится родителем дочернего процесса. Таким образом, дочерний процесс завершается, а таблица процессов удаляется ОС.

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

проверить эту команду в linux ubuntups -eo pid, ppid, status, cmd Если вы нашли что-то вроде defunc, то есть ваш процесс зомби и занимает место