我想在它自己的进程组中启动一个进程(或者,一旦启动就改变它的组)并且:
- 让组中的进程从终端响应
Ctrl
+C
- 获取进程组的 id,以便我可以通过
kill
命令终止组中的所有进程。
注意:我尝试过setsid prog [args]
,但进程没有从终端响应 Ctrl+C,也无法获得新的进程组 ID。
我还尝试通过 Perl 的setpgrp($pid, $pid)
and更改进程组POSIX::setpgid($pid, $pid)
,但无济于事。
编辑:更大的问题:
我有一个进程(单线程;我们称其为“多产”进程P
),它同步启动许多子进程(一个接一个;当前一个子进程终止时,它会启动一个新进程)。从终端,我希望能够杀死P
它下面的进程树。为此,我可以简单地安排杀死P
's 组中的进程。但是,默认行为是P
在其父进程的组中。这意味着P
如果我杀死P
' 组中的所有进程,则 ' 的父级将被杀死,除非我有P
并且它的树在他们自己的组中。
我的意图是杀死P
它下面的树,而不是P
' 的父母。另外,我不能修改P
's 代码本身。