2012-02-05 39 views
2

我有一個程序,將陷阱Ctrl + c,但它可以被困一次。當您鍵入exit以退出irb會話時,由生成的信號不能再被捕獲Ctrl + c。有任何想法嗎?這是該程序:在Ruby中,如何多次捕獲信號?

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 

回答

5

問題是,當您調用它時,IRB會爲sigint設置自己的處理程序,這會覆蓋您的處理程序。爲了解決這個問題,你可以重新設置您的處理器,IRB完成後,像這樣:

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

set_trap 

這將導致一堆警告,當你調用IRB第二次雖然,但這是與調用IRB的一個普遍問題多次。