我正在通过 ruby 学习系统编程,但我无法理解这种行为:
pid = fork do
Signal.trap("USR1") do
puts "hello!"
end
Signal.trap("TERM") do
puts "Terminating"
exit
end
loop do
end
end
Process.detach(pid)
Process.kill("USR1", pid)
Process.kill("USR1", pid)
Process.kill("USR1", pid)
Process.kill("USR1", pid)
Process.kill("TERM", pid)
这输出如我所料:
hello!
hello!
hello!
hello!
Terminating
但是,如果我注释掉 Process.detach,子进程似乎只响应一次信号(并且在终止之后?):
Terminating
hello!
我很困惑为什么当我不分离进程时会发生这种情况,即使我发送了 USR1 四次。有人可以帮助解释这种行为吗?我想我不明白分离流程意味着什么。
非常感谢!