小ネタ② シグナルハンドラ
シグナルを受信した時の動作を設定できるハンドラがシグナルハンドラです。
Ctrl+CでSIGINTが飛んできた時に独自の終了処理を実行できたりします。
pythonでシグナルハンドラを設定するのは簡単で、たった2ステップでできてしまいます。
①シグナルを受信した時に実行したい関数を用意する
②受信したいシグナルを設定する
ベリーイージーですね。
それではサンプルコードどうぞ。
とても簡単ですが、注意点もあるので以下は気をつけてください。
- シグナルハンドラに設定する関数は(signum, frame)という二つの引数を必ずとる
- signal.signal()で設定しなかったシグナルに対してはデフォルトの動作が適用される(例えばSIGINTだけをハンドラに設定していた場合SIGTERMを受信したらハンドラが呼ばれずに殺されるということです。)
- シグナルはプロセス全体に送信されるのでスレッド間の通信には使えない
詳しくは以下の公式ドキュメントとか、OS仕様で確認してください。
https://docs.python.org/ja/3/library/signal.html
コメント