在ruby过程中,我将一个带有系统调用的孩子分开。
我希望能够杀死孩子并将其传播到系统调用,但系统调用仍在运行:
unless pid=fork
system("echo start ; sleep 1 ; echo 1 ; sleep 1 ; echo 2 ; sleep 1 ; echo 3")
exit
end
puts "Child: #{pid}"
sleep 2
Process.kill('-KILL',-pid)
如何将kill从ruby传播到它的分叉系统调用?
答案 0 :(得分:0)
显然,system
会阻止。请改用exec
:
http://ruby-doc.org/core-2.2.0/Kernel.html#method-i-exec
unless pid=fork
puts pid
exec("echo start ; sleep 1 ; echo 1 ; sleep 1 ; echo 2 ; sleep 1 ; echo 3")
exit
end
puts "Child: #{pid}"
sleep 1
Process.kill('KILL',pid)
puts 'killed'