0

Si j'ai un code comme celui-ci dans le fichier this_script.py:Est-ce que tuer le script Python qui a appelé les processus shell tue également les processus shell?

import subprocess 
subprocess.Popen(["python", "another_script.py"]) 

et j'appelle

python this_script.py 

et tuer le processus en cours d'exécution, il va tuer le sous-processus? Edit: J'ai testé ceci, et si this_script est détruit, le sous-processus continue à s'exécuter. Y at-il un moyen de s'assurer que le processus d'arrière-plan meurt lorsque le processus Python principal fait?

+1

Pourquoi ne pas essayer? –

+0

La réponse peut être différente sur différentes plateformes, comme le suggère @TymoteuszPaul, vous devriez l'essayer vous-même pour être sûr de la façon dont il agit sur votre plate-forme. –

+0

Je l'ai testé, continue à fonctionner quand le processus principal est tué (c'est sur CentOS). Y at-il un moyen de s'assurer que le sous-processus meurt lorsque le processus principal meurt? – Andrew

Répondre

2

Oui, vous pouvez attraper KeyboardInterrupt, et SystemExit et assurez-vous de kill le sous-processus.

from subprocess import Popen 

try: 
    p = Popen(args) 
    p.wait() # wait for the process to finish 
except KeyboardInterrupt, SystemExit: 
    p.kill() 
    raise 
+0

Le problème avec ce code est que 'Popen()' s'exécute de manière asynchrone. En d'autres termes, le processus Python principal sera presque immédiatement fermé et le sous-processus s'exécutera en arrière-plan. Pour le réparer, vous pouvez ajouter 'p.wait()'. dans le bloc 'try', ou changez 'except ..' en' finally' ... Pas sûr de savoir ce que l'OP veut ... – Carpetsmoker

+0

Ah, oui. Tu as raison. Je vais l'ajouter. – MaxNoe