私は、multiprocessing.Processクラスを使用して新しいプロセスを生成するpythonスクリプトを持っています。このプロセスは、物事を監視するために永遠に実行されるはずです。 Unixでは、os.kill()を使用して特定のプロセスに信号を送信し、そのプロセス内のsignal.signal(...)を使用して、特定の割り込みハンドラを実装することができます。 Windowsでは動作しません。は、Pythonマルチプロセッシングを中断します。Windowsのシグナルを使用しているプロセス
popenを使用してそれを行う方法を読んでいます。 ProcessクラスのCREATE_NEW_PROCESS_GROUPフラグも指定できますか?そしてどうやって?ここ
は私のサンプルコードです:
import multiprocessing as mp
import time
import signal
import os
import platform
def my_h(signal, frame):
print("recieved signal", signal)
raise InterruptedError
def a_task():
signal.signal(signal.SIGINT, my_h)
print("this is 'a_task'", os.getpid())
try:
while True:
print(time.time())
time.sleep(1)
except Exception as e:
print(type(e), e)
print("'a_task' is at end")
if __name__ == '__main__':
p = mp.Process(target=a_task)
p.start()
time.sleep(1)
if platform.system() == 'Windows':
print("send CTRL_C_EVENT")
os.kill(p.pid, signal.CTRL_C_EVENT)
elif platform.system() == 'Linux':
print("send SIGINT")
os.kill(p.pid, signal.SIGINT)
time.sleep(3)
try:
os.kill(p.pid, signal.SIGTERM)
except:
pass
多分この:http://tweaks.com/windows/39559/kill-processes-from-command-prompt/ –
私はこの他の解決策は、あなたの問題を解決すると思います。 http://stackoverflow.com/questions/1230669/subprocess-deleting-child-processes-in-windows#4229404 – mydaemon
これは単にプロセスを終了させることではなく、停止の前に 'except'節が実行されることを保証することです。 – cima