2010-12-14 4 views
3

Pourquoi le pid de sous-processus (Popen.pid) a-t-il une valeur différente de celle de la commande ps?sous-processus pid différent de la sortie ps

Je l'ai remarqué lorsque ps appelé à la fois de l'intérieur de python (avec subprocess.call()) et d'un autre terminal.

est ici un simple fichier python à tester:

#!/usr/bin/python3 
''' 
Test subprocess termination 
''' 

import subprocess 

command = 'cat' 

#keep pipes so that cat doesn't complain 
proc = subprocess.Popen(command, 
        stdout=subprocess.PIPE, 
        stderr=subprocess.PIPE, 
        stdin=subprocess.PIPE, 
        shell=True) 

print('pid = %d' % proc.pid) 
subprocess.call("ps -A | grep -w %s" % command, 
        shell=True) 

proc.terminate() 
proc.wait()    # make sure its dead before exiting pytyhon 

Habituellement, le pid rapporté par ps est 1 ou 2 de plus que celui rapporté par Popen.pid. Comme la commande est exécutée avec shell=True, le pid retourné par le sous-processus est celui du processus shell utilisé pour exécuter la commande.

+0

Cela a fonctionné sur mon mac. Êtes-vous sûr de ne pas regarder la commande 'grep command' dans la sortie' ps'? Sur mon mac 'ps -A | grep' liste trois processus - 'cat','/bin/sh -c ps -A | grep -w cat', 'grep -w chat'. – khachik

+2

Je viens de me rendre compte que peut-être 'Popen.pid' est l'identifiant du processus shell et le rapport ps | grep le pid de' cat'? – khachik

+0

Oui. C'était 'shell = True'. Quelqu'un avait posté la réponse, mais ça ne semble plus être là ... À qui que ce soit, veuillez le republier pour que je puisse accepter. – Matthew

Répondre

4

Questions connexes