父进程不会捕获所有子进程

时间:2010-11-18 07:16:34

标签: c++ c process fork zombie-process

我有以下问题:

我有主(父)procces,它使用fork函数创建另一个进程(childs)。我正在抓住孩子的状态来消灭僵尸。当有1个子进程时,它被正确捕获,但是当父进程创建了更多进程(aprx.30)时,有aprx。留下4个僵尸=父亲没有抓住所有孩子(返回状态/州=< defunct>)。

使用

捕获子状态
void selfkill(int status) {
    wait(&status);
}

signal(SIGCHLD, selfkill);

提前致谢。

1 个答案:

答案 0 :(得分:4)

你应该在信号处理程序内的循环中使用waitpid()和WNOHANG。

可能发生的是,并非所有信号都被传递 - 因为它们中的一些信号彼此靠得太近。您也可以使用sigaction()代替signal()来缓解此问题。