我正在编写一个程序,它将同时运行多个进程。在此程序中,需要一个过程来暂时中止所有其他参与者。
为了节省在共享页面中列出所有参与者进程ID并单独发信号的开销,我创建了一个所有参与者都加入的进程组。
为了暂停组中的所有进程,我最初使用了该调用:killpg(0, SIGSTOP);
并打算通过以下方式恢复它们:killpg(0, SIGCONT);
但是我很快意识到,只要它也是进程组的成员,它也会暂停调用进程。因为任何进程都应该能够挂起该组的其他成员,所以我不能将一个进程专用于此任务。因此,我的问题是是否存在系统调用或机制来挂起除 call 者之外的所有组成员。我正在寻找专门针对Linux的东西。
最佳答案
您无法向除发件人以外的所有组成员发送信号,但是有一个合理的解决方法。您可以使用SIGSTOP
,而不是使用SIGTSTP
(无法处理或忽略它),默认情况下,它与SIGSTOP
具有相同的效果,从而停止接收它的过程。为避免停止发送方,只需让发送方在发送之前忽略该信号,然后在将信号发送到进程组后将信号处置重置为默认设置即可。