我有以下问题:
我有主(父)procces,它使用fork函数创建另一个进程(childs)。我正在抓住孩子的状态来消灭僵尸。当有1个子进程时,它被正确捕获,但是当父进程创建了更多进程(aprx.30)时,有aprx。留下4个僵尸=父亲没有抓住所有孩子(返回状态/州=< defunct>)。
使用
捕获子状态void selfkill(int status) {
wait(&status);
}
signal(SIGCHLD, selfkill);
提前致谢。
答案 0 :(得分:4)
你应该在信号处理程序内的循环中使用waitpid()
和WNOHANG。
可能发生的是,并非所有信号都被传递 - 因为它们中的一些信号彼此靠得太近。您也可以使用sigaction()
代替signal()
来缓解此问题。