Unix系においてプログラムの強制終了、停止でCtrl-cを使うことは周知のことかと思いますが
Rubyでも実行中にCtrl-cをすることで止めることができます。
百聞は一見にしかず。サンプルソースです。
begin
sleep 1000
rescue Interrupt
p 'exec Ctrl-C!'
end
# => "exec Ctrl-C!"
ということで、放っておいたら1000秒も待ってしまうプログラムです。
プログラムが実行されている間にCtrl-cをするとRubyでは例外クラスの一つであるInterrupt
が発生します。
rescueは、捕捉するクラスを指定しない場合にはStandardError
に属するエラーだけを補足します。
Interrupt
はStandardError
ではなくSignalException
クラスに属しているため、指定しなかった場合には捕捉されません。
Rubyでは他にもScriptError
なんかもあるので、これらを使えば自前でエラーが起きている箇所をもう少し分かりやすくするような構文チェックライブラリのようなものも作ることができるのではないかな、と思います。要るのかはさておき。
そもそもこのtipsも、どんな場面で使うねん、という気がしなくもないです。
例えば何かDBを更新するようなバッチがあるとして開発用に
rescue Interrupt
したときにロールバックするような実装にしておくとか、いかがでしょうか。
僕はたぶん使いません。
※本文は個人ブログの記事の焼き直しです。