【发布时间】:2017-07-11 07:24:05
【问题描述】:
我有一个生成大量子进程的脚本 (script.sh)。如果我通过 ./script.sh 从 shell 运行脚本,我可以通过
杀死整个进程树kill -- -<PID>
其中 PID 是 script.sh 进程的进程 ID(这显然等于组 ID)。
但是,如果我通过 Ruby 从 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 中杀死这个进程树?
【问题讨论】:
-
你是否在你的 ruby 脚本中交叉检查了 pid 的值
-
是的,Spawn 的 pid 与我在 ps ax 中看到的 pid 对应
-
我会尝试派生一个子进程以在其中运行脚本并杀死它的 pid,就像在 kill example 中一样。