2011-04-13 94 views
3

我希望能够处理相同类型的许多信号(SIGCHLD),但是,我想确保在我还在处理信号的同时前一个,我将完成处理第一个到达,并且只有在我处理完之后,我才能处理下一个。如何通过到达的顺序处理多个信号C

可能有多个信号等待处理。

另外,如果父进程终止或终止进程(使用SIGTERM/SIGKILL),进程是否会发送SIGCHLD

回答

5

只要您使用sigaction,而不是问题的signal功能设置信号处理程序,你可以肯定的(除非另行指定),其信号处理程序不会被它的处理信号的另一个发生中断。但是,如果许多子进程全部死亡,您可能无法收到每个进程的信号,则可能会发生这种情况。每个SIGCHLD,正常的程序是尝试wait为孩子,直到你的wait - 家庭功能说没有孩子可以等待。在这一点上,你可以确定,任何进一步的子女终止会给你一个新的SIGCHLD。另外,由于您对信号处理程序可以使用哪些函数非常有限,因此只需设置某种标志或以其他方式通知主程序循环它应该检查是否已终止儿童通过wait接口之一。

最后,是的,无论孩子终止的原因 - 包括是否被父母杀死,都会发送SIGCHLD