儿童过程无法正常退出的原因是什么?

时间:2011-01-28 06:08:10

标签: c

分叉的子进程正在工作,没有正确退出(杀死)。发生这种情况的可能实例是什么?

2 个答案:

答案 0 :(得分:1)

孩子可能是僵尸。

子进程退出后,进入Z(Zombie)状态。此状态用于保存子项的退出状态,直到子项的父进程可以检索它,并防止子项的PID被重用,直到父项被通知子项退出为止。

通过调用wait() / waitpid()系列调用之一,通知父进程已退出子进程。通常,这是为了响应SIGCHLD信号而完成的。父母完成此操作后,子PID将被释放,僵尸进程将消失。

(或者,如果父进程退出,其所有未完成的子进程将被重新分配到init,这将在它们退出时调用waitpid()

答案 1 :(得分:0)

父进程是否等待孩子的退出状态?您是否尝试过从wait()返回的值上的WIFSIGNALED()和WTERMSIG()宏来查看子项是否被信号终止,如果是,是哪一个?