在Ruby中,如何多次捕获信号?

时间:2012-02-05 15:11:08

标签: ruby signals

我有一个程序会捕获 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

1 个答案:

答案 0 :(得分:5)

问题是IRB在调用时为sigint设置了自己的处理程序,它会覆盖你的处理程序。要解决此问题,您可以在IRB完成后再次重置处理程序,如下所示:

def set_trap
  Signal.trap("INT")  do
    IRB.start
    set_trap
  end
end

set_trap

这会在第二次调用IRB时引发一堆警告,但这是多次调用IRB的一般问题。