3

我有以下问题:

我有主(父)进程,它使用 fork 函数创建另一个进程(子进程)。我正在捕捉孩子的状态以消除僵尸。当有 1 个子进程时,它被正确捕获,但是当父进程创建的进程(aprx. 30)更多时,有 aprx. 剩下 4 个僵尸 = 父级没有捕获所有子级(返回状态/状态 = <defunct>)。

使用捕获子状态

void selfkill(int status) {
    wait(&status);
}

signal(SIGCHLD, selfkill);

提前致谢。

4

1 回答 1

4

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

可能发生的情况是,并非所有信号都被传递——因为其中一些信号到达的距离太近了。sigaction()您也可以通过使用而不是来缓解这个问题signal()

于 2010-11-18T07:22:28.603 回答