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.
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
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
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