我有一个由其父级监控的进程.孩子遇到一个导致它打电话的错误abort.该过程不会篡改中止进程,因此它应按预期进行(转储核心,终止).父母应该检测孩子的终止并触发一系列事件来响应失败.孩子是多线程和复杂的.
这是我从中看到的ps:
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
0 1000 4929 1272 20 0 85440 6792 wait S+ pts/2 0:00 rxd
1 1000 4930 4929 20 0 0 0 exit Zl+ pts/2 38:21 [rxd] <defunct>
Run Code Online (Sandbox Code Playgroud)
因此,孩子(4930)已经终止.这是一个僵尸.我不能像预期的那样依附于它.但是,父母(4929)在以下情况下受阻:
int i;
// ...
waitpid (-1, &i, 0);
Run Code Online (Sandbox Code Playgroud)
所以看起来这个孩子是一个僵尸,但不知何故还没有完成其父母收获所需的一切.我认为,这个WCHAN领域exit是一个有价值的线索.
该平台是64位Linux,Ubuntu 13.04,内核3.8.0-30.孩子似乎没有倾倒核心或做任何事情.我离开了系统几分钟,没有任何改变.
有没有人有任何想法可能导致这个或我能做些什么呢?
更新:另一个有趣的信息 - 如果我kill -9是父进程,孩子就会消失.这有点莫名其妙,因为父进程很简单,只是阻塞waitpid.此外,当出现此问题时,我没有得到任何核心转储(来自孩子).
更新:孩子似乎陷入了困境schedule,被召唤exit_mm,来自do_exit.我想知道为什么 …