18
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ctrl-cの強制停止はrescueで補足できる

Posted at

Unix系においてプログラムの強制終了、停止でCtrl-cを使うことは周知のことかと思いますが
Rubyでも実行中にCtrl-cをすることで止めることができます。

百聞は一見にしかず。サンプルソースです。

sample.rb
begin
  sleep 1000
rescue Interrupt
  p 'exec Ctrl-C!'
end
# => "exec Ctrl-C!"

ということで、放っておいたら1000秒も待ってしまうプログラムです。
プログラムが実行されている間にCtrl-cをするとRubyでは例外クラスの一つであるInterruptが発生します。

class Interrupt | Ruby 2.1.0 リファレンスマニュアル

rescueは、捕捉するクラスを指定しない場合にはStandardErrorに属するエラーだけを補足します。
InterruptStandardErrorではなくSignalExceptionクラスに属しているため、指定しなかった場合には捕捉されません。

Rubyでは他にもScriptErrorなんかもあるので、これらを使えば自前でエラーが起きている箇所をもう少し分かりやすくするような構文チェックライブラリのようなものも作ることができるのではないかな、と思います。要るのかはさておき。

そもそもこのtipsも、どんな場面で使うねん、という気がしなくもないです。
例えば何かDBを更新するようなバッチがあるとして開発用に
rescue Interruptしたときにロールバックするような実装にしておくとか、いかがでしょうか。
僕はたぶん使いません。

※本文は個人ブログの記事の焼き直しです。

18
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?