ruby - 从 Ruby 中杀死进程组会杀死我的整台计算机

标签 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 中杀死这个进程树?

最佳答案

我想我已经找到了解决方案。生成进程为

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

使我能够通过

终止进程组
Process.kill(9,-Process.getpgid(pid))

看起来 bash 默认情况下会分组进程,而 Spawn 默认情况下不会启用此功能。

关于ruby - 从 Ruby 中杀死进程组会杀死我的整台计算机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45027973/

相关文章:

ruby - 升级到 bundler-1.0.22 时,gem 清理显示错误 : Unable to uninstall bundler-1. 0.21

ruby - ruby block 的动态嵌套

c - 在 C 中处理管道

ruby - 安装 Thrift 时出错 : can't find header files for ruby

ruby - Savon 请求失败

linux - 如何查找在应用程序启动期间加载的共享对象?

django - 为 django 项目安装 memcached

javascript - 如何使用 Javascript 和 QWebview 将变量打印到 Linux 控制台

linux - tail 未在 bash 脚本中提供输出

ruby - 如何在 ruby​​ 1.8.7 中将网页撇号 (’) 转换为 ascii 39