2013-06-04 2 views
1

Выполняет ли каждый выход (или_exit или exit) из дочернего объекта SIGCHLD для своего родителя? Если это так, то как создается зомби-процесс? Поскольку системный вызов ожидания обычно вызывается в SIGCHLD обработчик.zombie process, SIGCHLD, exit в unix

+1

Одна из основных причин. Родитель не вызывает wait() для дочернего элемента, не выходит. Поэтому init не может пожинать дочерний процесс. ЕСЛИ родитель вышел без вызова wait(), тогда init возьмет на себя «onwership» и пожинает дочерний процесс. Зомби обычно являются результатом плохой практики кодирования. –

ответ

2

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

Если родитель процесса не игнорирует SIGCHLD, то мертвый ребенок становится зомби до тех пор, пока его не соберет родитель, используя waitpid() или один из его вариантов. Если родитель не пожинает мертвого ребенка, он останется зомби.