2010-11-18 66 views
3

我有以下问题:父进程没有赶上他所有的子进程

我有main(父)procces,它使用fork函数创建另一个进程(childs)。我正在抓住孩子消除僵尸的状态。当有一个子进程时,它正确地被捕获,但是当有更多的进程(aprx.30)由父进程创建时,有aprx。 4个僵尸左=父母不赶上所有的孩子(返回状态/状态= <失效>)。

儿童状况事先使用

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

signal(SIGCHLD, selfkill); 

感谢逮住。

回答

4

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

可能发生的情况是,并非所有的信号都被传送 - 因为它们中的一些到达彼此太靠近。您也可以通过使用sigaction()而不是signal()来缓解该问题。