2012-02-05 2 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에 대한 자신의 핸들러를 설정하는 것입니다 :이 프로그램입니다.

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

set_trap 

이 당신이 생각 IRB에게 두 번째 시간을 호출 경고 한 무리의 원인이됩니다,하지만 IRB를 호출와 일반적인 문제입니다 :이 문제를 해결하려면, IRB를 완료 한 후에는 다음과 같이, 다시 핸들러를 재설정 할 수 있습니다 여러 번.

관련 문제