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")