我有以下问题:
我有主(父)进程,它使用 fork 函数创建另一个进程(子进程)。我正在捕捉孩子的状态以消除僵尸。当有 1 个子进程时,它被正确捕获,但是当父进程创建的进程(aprx. 30)更多时,有 aprx. 剩下 4 个僵尸 = 父级没有捕获所有子级(返回状态/状态 = <defunct>)。
使用捕获子状态
void selfkill(int status) {
wait(&status);
}
signal(SIGCHLD, selfkill);
提前致谢。
我有以下问题:
我有主(父)进程,它使用 fork 函数创建另一个进程(子进程)。我正在捕捉孩子的状态以消除僵尸。当有 1 个子进程时,它被正确捕获,但是当父进程创建的进程(aprx. 30)更多时,有 aprx. 剩下 4 个僵尸 = 父级没有捕获所有子级(返回状态/状态 = <defunct>)。
使用捕获子状态
void selfkill(int status) {
wait(&status);
}
signal(SIGCHLD, selfkill);
提前致谢。
您可能应该waitpid()
在信号处理程序内的循环中使用 WNOHANG。
可能发生的情况是,并非所有信号都被传递——因为其中一些信号到达的距离太近了。sigaction()
您也可以通过使用而不是来缓解这个问题signal()
。