用信号通知流程组中除自身之外的所有流程

我正在编写一个程序,它将同时运行多个进程.在此程序中,需要一个过程来暂时中止所有其他参与者.

为了节省在共享页面中列出所有参与者进程ID并单独发信号的开销,我创建了一个所有参与者都加入的进程组.

为了暂停组中的所有进程,我最初使用了该调用:

killpg(0,SIGSTOP);

并打算通过以下方式恢复它们:

killpg(0,SIGCONT);

但是我很快意识到,只要它也是进程组的成员,它也会暂停调用进程.因为任何进程都应该能够挂起该组的其他成员,所以我不能将一个进程专用于此任务.因此,我的问题是是否存在系统调用或机制来挂起除呼叫者之外的所有组成员.我正在寻找专门针对Linux的东西.

最佳答案
您无法向除发件人以外的所有组成员发送信号,但是有一个合理的解决方法.您可以使用SIGTSTP,而不是使用SIGSTOP(无法处理或忽略它),默认情况下,它将与SIGSTOP相同,从而停止接收它的进程.为避免停止发送方,只需让发送方在发送之前忽略该信号,然后在将信号发送到进程组后将信号处置重置为默认设置即可.

转载注明原文:用信号通知流程组中除自身之外的所有流程 - 代码日志