[英]In Ruby, how to trap a signal multiple times?
我有一个程序可以捕获Ctrl + c ,但是它只能被捕获一次。 当您键入exit
退出irb会话时, Ctrl + c生成的信号将不再被捕获。 有任何想法吗? 这是程序:
require 'irb'
#trap "INT" do
# IRB.start
#end
Signal.trap("INT") { IRB.start }
count = 0
loop do
count += 1
puts count
puts "Value = #{@value}" if defined? @value
sleep 1
end
问题在于,IRB在调用它时会为sigint设置自己的处理程序,该处理程序会覆盖您的处理程序。 要解决此问题,您可以在IRB完成后再次重置处理程序,如下所示:
def set_trap
Signal.trap("INT") do
IRB.start
set_trap
end
end
set_trap
但是,当您第二次调用IRB时,这会引起一堆警告,但这是多次调用IRB的普遍问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.