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