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

Jus*_*ner 2 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
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 5

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

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

set_trap
Run Code Online (Sandbox Code Playgroud)

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