[英]how to handle multiple signals by order of arrival in C
我希望能够处理许多相同类型的信号( SIGCHLD
),但是,我想确保如果信号在我仍在处理前一个信号时到达,我将完成处理第一个信号到达,并且只有在我完成处理之后,我才会处理下一个。
可能有多个信号等待处理。
此外,如果父进程终止或终止(使用SIGTERM
/ SIGKILL
)进程,进程是否会发送SIGCHLD
?
只要您使用sigaction
而不是有问题的signal
函数来设置信号处理程序,您可以确定(除非您另行指定)您的信号处理程序不会被其处理的另一个信号中断。 但是,如果许多子进程一次全部死亡,您可能无法收到每个进程的信号。 在每个SIGCHLD
,正常的过程是尝试wait
孩子,直到你的wait
-family函数说没有孩子等待。 此时,您可以确定任何进一步的子终止将为您提供新的SIGCHLD
。
此外,由于您对信号处理程序可以使用的功能非常有限,您可能最好只设置某种标志或以其他方式通知主程序循环它应该检查已终止的子项wait
接口。
最后,是的,无论孩子终止的原因是什么,都会提供SIGCHLD
- 包括它是否被父母杀死。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.