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 をコメントアウトすると、子プロセスはシグナルに 1 回だけ応答するように見えます (終了後?):
Terminating
hello!
USR1 を 4 回送信したにもかかわらず、プロセスをデタッチしないとなぜこれが起こるのか、私は混乱しています。誰かがこの動作を説明できますか? プロセスを分離することの意味を理解していないと思います。
本当にありがとう!