Signal.trap の設定を解除するにはどうすればよいですか?
概要
割り込み時に停止したいループがあるのですが、これを実行すると、元の動作が失われます。割り込みの動作を一時的に変更し、その後、通常どおりに動作できるように設定し直すにはどうすればよいですか?
stop = false
trap = Signal.trap('INT') { stop = true } # returns "DEFAULT"
loop do
break if stop
end
Signal.trap('INT') { trap } # <-- does not work
私はできることを知っています:
Signal.trap('INT') do
stop = true
exit
end
しかし、むしろデフォルトの動作にさせたいのですが…どうすればよいでしょうか?
解決策
明示的に「デフォルト」の動作に設定できると思います。例を示します。
stop = false
Signal.trap("INT") { stop = true }
loop do
break if stop
end
loop do
# have to ctrl-\ to exit
p "stuck forever"
sleep 1
end
stop = false
Signal.trap("INT") { stop = true }
loop do
break if stop
end
Signal.trap("INT", "DEFAULT")
loop do
# ctrl-c now works
p "not stuck forever"
sleep 1
end
https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://ruby-doc.org/3.3.0/Kernel.html#method-i-trap