Каковы причины того, что дочерний процесс не завершается должным образом? - PullRequest
1 голос
/ 28 января 2011

Дочерний процесс, который разветвлен, работает и не завершается должным образом.Каковы возможные варианты этого?

Ответы [ 2 ]

1 голос
/ 28 января 2011

Возможно, что ребенок зомби.

После выхода из дочернего процесса он переходит в состояние Z (Zombie). Это состояние существует для хранения состояния выхода ребенка до тех пор, пока родительский процесс ребенка не сможет его извлечь, и для предотвращения повторного использования PID ребенка до тех пор, пока родитель не будет уведомлен о выходе ребенка.

Родительский процесс получает уведомление о выходе из дочернего процесса посредством вызова одного из системных вызовов семейства wait() / waitpid(). Обычно это делается в ответ на сигнал SIGCHLD. Как только родитель сделает это, дочерний PID будет освобожден, а процесс Zombie исчезнет.

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

0 голосов
/ 28 января 2011

Родительский процесс wait () ожидает выхода из дочернего процесса? Вы пробовали макросы WIFSIGNALED () и WTERMSIG () в значении, возвращенном функцией wait (), чтобы увидеть, был ли дочерний элемент завершен сигналом и, если да, то каким?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...