Ruby Process.kill无法杀死ruby孩子中的system()

时间:2015-11-27 09:27:04

标签: ruby process kill-process sigkill

在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传播到它的分叉系统调用?

1 个答案:

答案 0 :(得分:0)

显然,system会阻止。请改用exechttp://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'