Lorsque j'écrivais un test pour un programme qui s'exécute en tant que démon, j'avais besoin de le tuer après un certain temps.
main process
|
|--- subprocess1
|--- subprocess2
|--- subprocess3
Les sous-processus sont démarrés comme suit.
# main.py
from multiprocessing import Process
ps = [
Process(target=hogehoge1),
Process(target=hogehoge2),
Process(target=hogehoge3),
]
for i in ps:
i.start()
** Ce que vous voulez faire **
Effacez d'une manière ou d'une autre tous les sous-processus d'un autre processus.
Quand je l'exécute dans le terminal, je peux tout effacer avec celui-ci, donc je vais l'essayer.
# other.py
import subprocess
from time import sleep
from signal import SIGINT
proc = subprocess.Popen(cmd)
sleep(5) #attendre un peu
proc.send_signal(SIGINT)
Seuls les parents disparaissent et les sous-processus restent.
De cette façon, cela a fonctionné. Le parent devrait avoir un signal (de l'expérience précédente), supprimons donc le sous-processus du parent. Modifiez le fichier parent.
# 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)
Remarque: Si vous oubliez ʻexit (0) `, vous ne pourrez pas tuer le processus parent.
Il n'est pas bon de faire du multi-processus dans l'atmosphère.
Recommended Posts