来自Ruby的杀戮过程组杀死了我的整个计算机

时间:2017-07-11 07:24:06

标签: ruby linux

我有一个脚本(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中删除这个进程树?

1 个答案:

答案 0 :(得分:0)

我想我找到了解决方案。将过程产生为

pid = Process.spawn(script.sh, :pgroup => true)

让我能够通过

杀死进程组
Process.kill(9,-Process.getpgid(pid))

默认情况下,它看起来像bash组进程,而Spawn默认情况下不会启用它。