我有一个脚本(script.sh),它产生了很多子进程。如果我通过./script.sh从shell运行脚本,我可以通过
杀死整个进程树kill -- -<PID>
其中PID是script.sh进程的进程ID(这显然等于组ID)。
但是,如果我通过
从Ruby生成脚本pid = Process.spawn(script.sh)
我无法杀死进程树。
Process.kill(9,pid)
只会杀死父进程。甚至最糟糕的是,以下
Process.kill(9,-Process.getpgid(pid)) ### Don't try this line at home
终止我的电脑。 试图通过
杀死进程system("kill -- -#{pid}")
也失败了。 我怎么能从Ruby中删除这个进程树?
答案 0 :(得分:0)
我想我找到了解决方案。将过程产生为
pid = Process.spawn(script.sh, :pgroup => true)
让我能够通过
杀死进程组Process.kill(9,-Process.getpgid(pid))
默认情况下,它看起来像bash组进程,而Spawn默认情况下不会启用它。