用子进程杀死ruby中的分叉进程

时间:2017-05-30 11:03:36

标签: ruby

以下代码分叉主进程并在反引号中运行命令。脚本末尾的kill只会杀死分叉进程,但不会杀死它的子进程(即sleep命令)。

pid = fork do
  Thread.new do
    `sleep 20`
  end
end
sleep(1)
Process.kill("HUP",pid)

除了搜索进程树之外,有没有办法杀死所有子进程(由分叉进程中的线程中的反引号命令生成)?

2 个答案:

答案 0 :(得分:2)

  

在场景后面,系统和反引号操作都使用fork to fork   当前进程然后他们使用执行给定的操作   执行。

     

由于exec替换了当前进程,因此它不会返回任何内容   这次行动是成功的。如果操作失败则   `引发SystemCallError。

http://blog.bigbinary.com/2012/10/18/backtick-system-exec-in-ruby.html

答案 1 :(得分:0)

您可以使用

pid = Process.spawn('sleep 20')

立即获取进程的PID。您上面的代码将更改为:

pid = Process.spawn('sleep 20')
sleep(1)
Process.kill('HUP',pid)