Interrupt

Interrupt

인터럽트 신호(interrupt signal)를 받았을 때 발생하는 예외예요. 흔히 사용자가 Control-C를 눌렀을 때죠(대부분의 POSIX 플랫폼에서). 그래서 SignalException의 하위 클래스예요.

출처: Ruby 4.0 API

본문

콘솔에서 프로그램이 끝없이 돌다가 Ctrl-C를 누르면 실행이 멈추는 걸 본 적이 있을 거예요. 그게 바로 인터럽트 신호가 전달된 거고, Ruby에선 이를 Interrupt 예외로 받아서 처리할 수 있어요. begin/rescue로 잡아서 "그냥 멈추는 대신 내가 원하는 마무리를 하고 끝내자" 같은 흐름을 만들 수 있죠.

begin
  puts "Press ctrl-C when you get bored"
  loop {}
rescue Interrupt => e
  puts "Note: You will typically use Signal.trap instead."
end

이 코드를 실행하면 먼저 Press ctrl-C when you get bored를 출력하고, loop {}가 끝없이 돌면서 사용자가 Ctrl-C를 누르길 기다려요.

이 코드가 실행하면 다음과 같이 출력돼요.

Press ctrl-C when you get bored

그다음 Control-C로 인터럽트될 때까지 기다렸다가, 인터럽트되면 다음과 같이 출력해요.

Note: You will typically use Signal.trap instead.

여기서 한 가지 짚어둘 게 있어요. Interruptrescue로 직접 잡는 것보다는, 신호 자체를 다루고 싶다면 보통 Signal.trap을 쓰는 쪽이 더 일반적이에요. 위 예시의 rescue 문 안 메시지가 딱 그 얘기를 해주고 있죠. 곧 Ctrl-C 처리에는 Signal.trap이 더 적합한 경우가 많다는 걸 기억해 두시면 좋아요.