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