父进程无法捕获所有子进程

3

我有以下问题:

我有一个主(父)进程,它使用 fork 函数创建另外的子进程。我正在捕获子进程的状态以消除僵尸进程。当只有一个子进程时,可以正确地捕获其状态;但是当父进程创建了大约 30 个进程时,就会留下大约 4 个僵尸进程=父进程无法捕获所有子进程(返回状态/状态 = <defunct>)。

使用以下语句来捕获子进程的状态

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

signal(SIGCHLD, selfkill);

提前感谢您。

1个回答

4
你可能需要在信号处理程序中使用带有WNOHANG的waitpid()循环。
问题可能是没有递送所有信号,因为其中一些信号到达时间太接近。您可以考虑使用sigaction()替换signal()以缓解此问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接