Ich habe ein Python-Skript, das einen neuen Prozess mit Multiprocessing.Process-Klasse erzeugt. Dieser Prozess soll für immer laufen, um Dinge zu überwachen. Unter Unix kann ich jetzt os.kill() verwenden, um ein Signal an diesen spezifischen Prozess zu senden, und signal.signal (...) innerhalb dieses Prozesses, um meinen speziellen Interrupt-Handler zu implementieren. Unter Windows funktionieren die Dinge nicht.Interrupt Python Multiprocessing.Process mit Signalen in Windows
Ich lese, wie es mit popen funktioniert. Kann ich das CREATE_NEW_PROCESS_GROUP-Flag für die Process-Klasse auch angeben? und wie?
hier ist mein Beispielcode:
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
vielleicht dies: http://tweaks.com/windows/39559/kill-processes-from-command-prompt/ –
Ich denke, die andere Lösung Ihr Problem zu beheben. http://StackOverflow.com/Questions/1230669/subprocess-Deleting-Child-Processes-in-Windows#4229404 – mydaemon
Es geht nicht einfach über den Prozess zu beenden, sondern sicherzustellen, dass die 'except' -Klausel vor dem Stoppen – cima