процесс зомби, SIGCHLD, выход в unix

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


person user2452230    schedule 04.06.2013    source источник
comment
Одна из основных причин: родительский объект не вызывает wait () для дочернего элемента и не завершает работу. Таким образом, init не может получить дочерний процесс. ЕСЛИ родительский процесс завершился без вызова wait (), тогда init возьмет на себя управление и пожнет дочерний процесс. Зомби обычно являются результатом плохой практики программирования.   -  person jim mcnamara    schedule 04.06.2013


Ответы (1)


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

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

person Celada    schedule 04.06.2013