Als ich einen Test für ein Programm schrieb, das als Daemon ausgeführt wird, musste ich ihn nach einer bestimmten Zeit beenden.
main process
|
|--- subprocess1
|--- subprocess2
|--- subprocess3
Die Unterprozesse werden wie folgt gestartet.
# main.py
from multiprocessing import Process
ps = [
Process(target=hogehoge1),
Process(target=hogehoge2),
Process(target=hogehoge3),
]
for i in ps:
i.start()
** Was du machen willst **
Löschen Sie auf irgendeine Weise alle Unterprozesse aus einem anderen Prozess.
Wenn ich es im Terminal laufen lasse, kann ich mit diesem alles löschen, also werde ich es versuchen.
# other.py
import subprocess
from time import sleep
from signal import SIGINT
proc = subprocess.Popen(cmd)
sleep(5) #warte ein wenig
proc.send_signal(SIGINT)
Nur die Eltern verschwinden und die Teilprozesse bleiben erhalten.
Auf diese Weise hat es funktioniert. Der Elternteil sollte ein Signal haben (aus dem vorherigen Experiment), also entfernen wir den Unterprozess vom Elternteil. Ändern Sie die übergeordnete Datei.
# main.py
from signal import SIGINT
import signal
def signalHandler(signal, handler) :
for i in ps:
i.terminate()
exit(0)
if __name__ == "__main__":
signal.signal(signal.SIGINT, signalHandler)
signal.signal(signal.SIGTERM, signalHandler)
Hinweis: Wenn Sie exit (0)
vergessen, können Sie den übergeordneten Prozess nicht beenden.
Es ist nicht gut, mehrere Prozesse in der Atmosphäre durchzuführen.
Recommended Posts