如何按C到达的顺序处理多个信号

我希望能够处理许多相同types的信号SIGCHLD ),但是我想确保如果在我处理前一个信号时有一个信号到达,我将完成处理第一个到达的信号,只有在处理完之后,我才能处理下一个。

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

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

只要您使用sigaction而不是有问题的signal函数来设置您的信号处理程序,则可以确定(除非另有指定)否则信号处理程序将不会被另一个正在处理的信号中断。 然而,如果许多子进程全部死亡,您可能无法收到每个进程的信号,这是可能的。 在每个SIGCHLD ,正常的程序是试图wait孩子,直到你的wait家庭功能表示没有孩子可以等待。 在这一点上,你可以确定,任何进一步的孩子终止会给你一个新的SIGCHLD

另外,由于您对信号处理程序可以使用哪些函数非常有限,因此您可能最好设置某种标志或者通知主程序循环它应该通过以下方式之一来检查终止的子程序: wait接口。

最后,是的,无论孩子终止的原因 – 包括是否被父母杀害,都会交付SIGCHLD