シグナル送信
pidを元に指定されたプロセスへSIGKILLを送信
def do_kill_process(pid):
try:
os.kill(int(pid), signal.SIGKILL) # kill(pid, sig)
except OSError as e:
if e.errno != errno.ESRCH: #「No such process」じゃない場合
raise e
利用可能なシグナルはsigkill以外にも多数あるので下記の公式ドキュメントがわかりやすかったです。
signal --- 非同期イベントにハンドラを設定する
シグナルハンドラ
pythonで書くシグナルハンドラの例です。
今回の例ではSIGINTをハンドリングしています。
def func(num, frame):
print (num, str(frame))
signal.signal(signal.SIGINT, func)
for i in range(100):
sleep(10)
上記、実行中にCtr-Cを入力しても受けとたシグナルナンバーとスタックフレームが出力されるだけとなります。