繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM