簡體   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