Ruby Process.kill 无法在 ruby child 中终止 system()
Ruby Process.kill can't kill system() in ruby child
在一个 ruby 进程中,我分叉了一个 child 并在其中进行了系统调用。
我希望能够终止 child 并将其传播到系统调用,但系统调用保持 运行:
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 传播到它的分叉系统调用?
显然,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'
在一个 ruby 进程中,我分叉了一个 child 并在其中进行了系统调用。
我希望能够终止 child 并将其传播到系统调用,但系统调用保持 运行:
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 传播到它的分叉系统调用?
显然,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'