Unix зомби и демоны

Я понимаю, что зомби создается, когда процесс не очищается хорошо (его ресурсы не утилизируются/пожинаются). После вызова fork () для создания нового процесса родитель всегда должен вызывать waitpid для его очистки.

Я также узнал, что демон создается путем раздвоения ребенка, который сам был создан вилкой, а затем позволил ребенку умереть. По-видимому, процесс init (pid #1) в UNIX возьмет на себя ответственность за процесс, как только вы это сделаете этот.

Что я хочу знать - насколько я знаю, когда родитель умирает, он автоматически очищает ребенка - так как же создается зомби в первую очередь?

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

2 ответов


что я хочу знать - насколько я знаю, когда родитель умирает очищает ребенка автоматически - так как же создается зомби во-первых?

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


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