我有一个程序会捕获 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
答案 0 :(得分:5)
问题是IRB在调用时为sigint设置了自己的处理程序,它会覆盖你的处理程序。要解决此问题,您可以在IRB完成后再次重置处理程序,如下所示:
def set_trap
Signal.trap("INT") do
IRB.start
set_trap
end
end
set_trap
这会在第二次调用IRB时引发一堆警告,但这是多次调用IRB的一般问题。