Ctrl + Cで終了しないRubyプログラム

バッチ用のRubyプログラムをちょっと動かしてからCtrl + Cで終了させたものの、止まってくれなくて焦る。標準出力にガンガン出力されていく…。
kill -s 9
で強制的にKillするが、そもそもCtrl + Cで止まらないことが問題。


ちょっと考えてみたところ、原因は簡単だった。
例外処理のところでJava時代の癖が残っていて、Exceptionクラスをキャッチしてしまっていたのだ。
Ctrl+Cを押下した際にRuby側に例外として投げられるのはInterruptクラス。スーパークラスを辿って行くとSignalException -> Exceptionクラスとなる。
プログラミング言語 Ruby リファレンスマニュアル


つまり、例外が発生して終了すべきところを、プログラム内でキャッチして吸収してしまったと言う事。最低だ…。


教訓:
例外を明示的にキャッチする時は一番粗い粒度はStandardErrorクラスとする事。
Exceptionクラスはキャッチしちゃダメ、絶対。