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

时间:2011-04-13 20:44:18

标签: c linux signals

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

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

此外,如果某个进程在父进程终止或终止(使用SIGCHLD / SIGTERM)时会发送SIGKILL吗?

1 个答案:

答案 0 :(得分:5)

只要您使用sigaction而不是有问题的signal函数来设置信号处理程序,您可以确定(除非您另行指定)您的信号处理程序不会被其他事件中断他正在处理的信号。但是,如果许多子进程一次全部死亡,您可能无法收到每个进程的信号。在每个SIGCHLD上,正常的程序是尝试wait为孩子,直到您的wait - 家庭功能说没有孩子等待。此时,您可以确定任何进一步的子终止都会为您提供新的SIGCHLD

此外,由于您对信号处理程序可以使用的功能非常有限,您可能最好只设置某种标志或以其他方式通知主程序循环它应检查已终止的子项通过其中一个wait接口。

最后,是的,无论孩子终止的原因是什么,都会传递SIGCHLD - 包括它是否被父母杀死。