Когда ребенок выходит, какой-то процесс должен получить wait
, чтобы получить код выхода. Этот код выхода хранится в таблице процессов до тех пор, пока это не произойдет. Акт чтения этого кода выхода называется «пожинать» ребенка. Между тем, когда ребенок выходит и собирается, он называется зомби. (Вся номенклатура немного ужасна, когда вы об этом думаете, я не рекомендую слишком много думать об этом.)
Зомби занимают пространство в таблице процессов. Они не занимают памяти или процессора. Однако таблица процессов представляет собой конечный ресурс, и чрезмерные зомби могут заполнить его, что означает, что другие процессы не могут запускаться. Кроме того, они назойливые беспорядки, и их следует избегать.
Если процесс завершается с детьми, которые все еще работают (и не убивают своих детей, метафора продолжает быть странной), эти дети являются сиротами. Дети-сироты сразу же «принимаются» по init
(на самом деле, я думаю, что большинство людей называют это «перевоспитанием», но «усыновление», по-видимому, лучше переносит метафору). Сирота - это всего лишь процесс. Он будет использовать любые ресурсы, которые он использует. Разумно сказать, что это не «сирота» вообще, поскольку у него есть родитель, но я слышал, что их часто называли так.
init
автоматически пожинает своих детей (принято или иным образом). Поэтому, если вы выйдете, не очистив своих детей, тогда они не станут зомби (по крайней мере, не более чем на мгновение).
Но существуют долгоживущие зомби. Кто они такие? Они являются бывшими детьми существующего процесса, который их не пожинал. Процесс можно повесить. Или это может быть плохо написано и забывает пожинать своих детей. Или, может быть, он перегружен и не дошел до него. Или что угодно. Но по какой-то причине родительский процесс продолжает существовать (поэтому они не являются сиротами), и их не ждали, поэтому они живут как зомби в таблице процессов.
Итак, если вы видите зомби дольше, чем один момент, значит, что-то не так с родительским процессом, и что-то нужно сделать для улучшения этой программы.
Создайте много зомби и наблюдайте за своей системой ssssllooooowwww – dbarnes
Нет причин для использования зомби-процесса (нетривиального количества) памяти ... он мертв. Это в основном местозаполнитель, так что родитель все еще может прочитать статус выхода в какой-то момент в будущем. – FatalError
Зомби не занимает значительную память или ресурсы, это (фактически) только статус выхода, ожидающий доставки. Сирота - это живой, бегущий процесс, как и любой другой - у него просто своеобразное имя. –