概要
Pythonで、シグナル)を受信する方法を調べ、実装して動くか試した。
背景と目的
Pythonで、シグナル)を受信する必要が出たので、方法を調べ、実装して動くか試す。
詳細
1.Pythonの標準モジュール signal
Pythonには、はじめからシグナルを扱うためのモジュールsignalが標準で備わっている。調べたらすぐに出てきた。なので、ここを読んで試すことにする。
2.実装
今回、試すのは、
- SIGTERM
linuxでいうところのkillコマンドで、プロセスを終了させられたとき
- SIGINT
端末で、CTRL + Cキー を押されたとき
マニュアルを参考に、以下のようなコードを実装。
import signal import time flag = True def sigterm_handler(signum, frame): print("sigterm_handler", signum, frame) global flag flag = False def sigint_handler(signum, frame): print("sigint_handler", signum, frame) global flag flag = False signal.signal(signal.SIGTERM, sigterm_handler) signal.signal(signal.SIGINT, sigint_handler) while flag: time.sleep(1)
3.動作確認
まず、CTRL + Cキーを押してみたところ、以下のようになった。SIGINTというシグナルを受信して、sigint_handler関数が呼ばれ、プログラムが終了したことがわかる。
^Csigint_handler 2 <frame at 0xb6a11c30, file 'signal_test.py', line 25, code <module>>
次に、killコマンドを実行し、プロセスを終了させてみたところ、SIGTERMというシグナルを受信して、sigterm_handler関数が呼ばれ、プログラムが終了したことがわかる。
sigterm_handler 15 <frame at 0xb69f3c30, file 'signal_test.py', line 25, code <module>>
ということで、正しく動作した。