2015-12-07 3 views
1

Considérons le code suivant:code de retour Python subprocess.Popen après avoir tué avec un signal

SIGNAL = 123 
proc = subprocess.Popen("longrunning") 
proc.send_signal(SIGNAL) 

Maintenant, ce que je veux est d'obtenir le code de sortie qui a été renvoyé du code avec exit().

Malheureusement, en Python, je ne reçois que le nombre de signaux que le processus a été arrêté avec:

>>> proc.returncode == -SIGNAL 
True 
+0

Quel système d'exploitation prend en charge le signal 123? – stark

+0

@stark nevermind, c'est juste par exemple. – bagrat

Répondre

1

Les deux sont mutuellement exclusifs. Si vous terminez le processus à la suite de l'obtention d'un signal, il n'aura pas la chance de produire un code retour avec exit().

Voir man 2 waitpid pour des explications sur le mécanisme d'appel système sous-jacent.

+0

Merci pour votre réponse! Donc, si le programme gère le signal et «sort» manuellement, cela signifie qu'il n'a pas été terminé par un signal? – bagrat

+0

Correct, du point de vue OS, le signal a été traité et le programme a décidé de sortir par lui-même. –