分叉的子进程正在工作,没有正确退出(杀死)。发生这种情况的可能实例是什么?
答案 0 :(得分:1)
孩子可能是僵尸。
子进程退出后,进入Z
(Zombie)状态。此状态用于保存子项的退出状态,直到子项的父进程可以检索它,并防止子项的PID被重用,直到父项被通知子项退出为止。
通过调用wait()
/ waitpid()
系列调用之一,通知父进程已退出子进程。通常,这是为了响应SIGCHLD
信号而完成的。父母完成此操作后,子PID将被释放,僵尸进程将消失。
(或者,如果父进程退出,其所有未完成的子进程将被重新分配到init
,这将在它们退出时调用waitpid()
。
答案 1 :(得分:0)
父进程是否等待孩子的退出状态?您是否尝试过从wait()返回的值上的WIFSIGNALED()和WTERMSIG()宏来查看子项是否被信号终止,如果是,是哪一个?