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'