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

SIM*_*MEL 3 c linux signals

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

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

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

R..*_*R.. 5

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

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

最后,是的,SIGCHLD无论孩子终止的原因是什么,包括是否被父母杀死.