我希望能够处理相同类型的许多信号(SIGCHLD
),但是,我想确保如果在我仍处理前一个信号时信号到达,我将完成处理第一个到达,只有在我完成处理后,我才会处理下一个。
可能有多个信号等待处理。
此外,如果某个进程在父进程终止或终止(使用SIGCHLD
/ SIGTERM
)时会发送SIGKILL
吗?
答案 0 :(得分:5)
只要您使用sigaction
而不是有问题的signal
函数来设置信号处理程序,您可以确定(除非您另行指定)您的信号处理程序不会被其他事件中断他正在处理的信号。但是,如果许多子进程一次全部死亡,您可能无法收到每个进程的信号。在每个SIGCHLD
上,正常的程序是尝试wait
为孩子,直到您的wait
- 家庭功能说没有孩子等待。此时,您可以确定任何进一步的子终止都会为您提供新的SIGCHLD
。
此外,由于您对信号处理程序可以使用的功能非常有限,您可能最好只设置某种标志或以其他方式通知主程序循环它应检查已终止的子项通过其中一个wait
接口。
最后,是的,无论孩子终止的原因是什么,都会传递SIGCHLD
- 包括它是否被父母杀死。