Ruby Tips!

RubyのTipsを紹介します

Rubyでシグナルハンドラを設定する

シグナルハンドラを設定するにはSignal.trapを使う。
第1引数にはシグナルのシンボルを渡し、ブロックでシグナルを受信したときに実行するコードを与える。
以下はSIGINT受信時に、ステータス3で終了するシグナルハンドラを設定する例である。

Signal.trap(:INT){ exit 3 }

Signal.trapはブロックを渡す以外に、第2引数に特別な文字列を与えて挙動を指定することもできる。
文字列とシグナルを受信した時の挙動を以下にまとめる。

文字列 挙動
SIG_IGN
IGNORE
そのシグナルを無視する。
SIG_DEF
DEFAULT
デフォルトのシグナルハンドラで処理する。
EXIT 終了処理を行った後ステータス0で終了する。

例えば単にステータス0で終了するSIGINTのシグナルハンドラは以下のように書ける。

Signal.trap(:INT, "EXIT")