【发布时间】:2018-10-23 07:48:29
【问题描述】:
我正在编写一个多个进程将同时运行的程序。在这个程序中,需要一个进程来临时暂停所有其他参与者。
为了省去在共享页面中列出所有参与者进程 ID 并单独发出信号的开销,我创建了一个所有参与者都加入的进程组。
为了暂停一个组中的所有进程,我最初使用了调用:
killpg(0, SIGSTOP);
并打算通过以下方式恢复它们:
killpg(0, SIGCONT);
不过,我很快意识到,这也会暂停调用进程,只要它也是进程组的成员。因为任何进程都应该能够挂起组中的其他成员,所以我不能将一个进程专门用于此任务。因此,我的问题是,是否存在系统调用或机制来暂停除调用者之外的所有组成员。我正在寻找专门用于 Linux 的东西。
【问题讨论】:
-
你无法捕捉到 SIGSTOP,但你可以捕捉到 SIGTSTP——所以发送 SIGTSTP 但在发送者中暂时忽略它。
-
@WilliamPursell 您是否建议我为所有进程安装处理程序,然后尝试推断我应该暂停执行还是继续执行?是否有一种快速的方法可以在没有处理程序的情况下暂时禁用信号?
-
不需要处理程序。 SIGSTSP 的默认处置与 SIGSTOP 相同。只需忽略发送方中的信号,然后发送,然后恢复默认配置。
man sigignore -
@WilliamPursell:为什么不把这个作为答案。
-
@alk 因为它没有回答如何向除一个之外的所有组成员发送信号的问题。这个问题的答案(我相信)是“你不能”。