C 向流程组中除自身以外的所有流程发送信号

C 向流程组中除自身以外的所有流程发送信号,c,linux,signals,ipc,C,Linux,Signals,Ipc,我正在编写一个程序,其中多个进程将同时运行。在该程序中,需要一个进程暂时挂起所有其他参与者 为了节省在共享页面中制表所有参与者进程ID并单独发送信号的开销,我创建了一个所有参与者都加入的进程组 为了挂起组中的所有进程,我最初使用了以下调用: killpg(0,SIGSTOP) 并打算在以下情况下恢复: killpg(0,SIGCONT) 不过我很快意识到,这也会暂停调用进程,只要它也是进程组的成员。因为任何进程都应该能够挂起组中的其他成员,所以我不能将一个进程用于此任务。因此,我的问题是,是否有

我正在编写一个程序,其中多个进程将同时运行。在该程序中,需要一个进程暂时挂起所有其他参与者

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

为了挂起组中的所有进程,我最初使用了以下调用:

killpg(0,SIGSTOP)

并打算在以下情况下恢复:

killpg(0,SIGCONT)


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

您不能向组中除发送者以外的所有成员发送信号,但有一个合理的解决方法。您可以使用
SIGTSTP
,而不是使用
SIGSTOP
(无法处理或忽略),默认情况下,它将具有与
SIGSTOP
相同的效果,停止接收它的进程。为了避免停止发送方,只需让发送方在发送信号之前忽略该信号,然后在向进程组发送信号后将信号配置重置为默认值。

您无法捕获SIGSTOP,但是您可以捕获SIGTSTP——因此发送SIGTSTP,但在发送方中暂时忽略它。@Williampersell您是否建议我为所有进程安装处理程序,然后尝试推断我应该暂停执行还是继续?是否有一种快速的方法可以在没有处理程序的情况下暂时禁用信号?不需要处理程序。SIGSTSP的默认配置与SIGSTOP相同。只需忽略发送方中的信号,然后发送,然后恢复默认配置
man sigignore
@Williampersell:为什么不回答这个问题。@alk因为它没有回答如何向组中除一名成员以外的所有成员发送信号的问题。这个问题的答案(我相信)是“你不能”。