WindowsのPythonでsubprocessにsignal.CTRL_C_EVENTを送るとメインプロセスにもKeyboardInterrputが発生する
Pythonバージョン: 3.5.2
タイトルにある通り、下記のようなコードでCTRL_C_EVENTを送信すると、メインプロセス側でもKeyboardInterruptが発生してしまいます。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import subprocess
import shlex
import time
import signal
def main():
p = subprocess.Popen(shlex.split('python3 child.py'),
shell=False,
)
time.sleep(2)
print('Send signal')
p.send_signal(signal.CTRL_C_EVENT)
p.wait() # <= ここでKeyboardInterruptが発生する
if __name__ == '__main__':
main()
<< Traceback (most recent call last):
<< File "test.py", line 48, in <module>
<< main()
<< └ <function main at 0x02805810>
<< File "test.py", line 26, in main
<< p.wait()
<< └ <subprocess.Popen object at 0x02F25CD0>
<< File "C:\Python35-32\lib\subprocess.py", line 1275, in wait
<< timeout_millis)
wait()だけでなく、print()等の、ブロックが発生する関数を呼び出して時点でKeyboardInterrputが呼び出されているように思います。
これはこういった仕様なのでしょうか?Windowsでsubprocessを安全に終了させる方法が中々見つけることができず、苦戦しています。