如何将SIGSTOP发送到从shell脚本启动的所有进程

Jac*_*cob 1 c linux shell

我有一个shell脚本,启动4个其他二进制文件.我正在向shell脚本发送SIGSTOP.这是否也会阻止所有其他4个进程?如果没有,我该怎么做才能将SIGSTOP转发给这些流程?与SIGCONT类似.

我有所有4个二进制文件的C源代码.

Jas*_*son 5

您可以调用setpgid()将执行shell脚本的分叉子进程.这将为该shell脚本中的任何衍生进程提供与子进程相同的组ID.然后,您可以使用killpg()该信号向整个组发送该组中的所有进程将接收的信号.

例如,如果在您调用的子进程内部setpgid(0, 0),则会设置一个特殊实例,其中子进程的组ID将设置为与子进程的PID相同的值.然后,使用其中一个exec函数覆盖在子进程上的任何进程将具有与该子进程相同的组ID值.此外,新覆盖的进程可能产生的任何进程也将具有相同的组ID(即,您的shell脚本).然后,您可以使用killpg(),将信号发送到任何进程共享使用,只是孩子的PID值组ID值fork(),因为子进程的组ID返回是相同的值后,孩子的PID setpgid(0, 0)电话.

如果您正在使用fork(),根据您需要从父进程向组发送信号的速度可能会产生一些同步问题...例如,您希望在分叉子进程后立即向进程组发送信号.有两种解决此:要么1)使用vfork(),而不是叉,所以父被暂停,直到孩子已经改变了它的组ID和调用成功exec,或2)调用setpgid()父进程,以及在孩子-process,但在父级中,而不是setgpid(0, 0)像在子级中那样使用,可以使用setpgid(CHILD_PID, CHILD_PID).然后,它不会不管它调用成功(其中一人将是成功的,而其他将失败,EACCES),并从父发出的任何连续信号现在西港岛线去的有效组ID.