以下代码分叉主进程并在反引号中运行命令。脚本末尾的kill只会杀死分叉进程,但不会杀死它的子进程(即sleep命令)。
pid = fork do
Thread.new do
`sleep 20`
end
end
sleep(1)
Process.kill("HUP",pid)
除了搜索进程树之外,有没有办法杀死所有子进程(由分叉进程中的线程中的反引号命令生成)?
答案 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)