PID подпроцесса отличается от вывода PS - PullRequest
4 голосов
/ 14 декабря 2010

Почему pid подпроцесса (Popen.pid) имеет значение, отличное от того, которое возвращает команда ps?

Я заметил это, когда ps вызывал как изнутри python (с subprocess.call()), так и из другого терминала.

Вот простой файл python для тестирования:

#!/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

Обычно pid, сообщаемый ps, на 1 или 2 больше, чем сообщаемый Popen.pid.

1 Ответ

5 голосов
/ 14 декабря 2010

Поскольку команда запускается с shell=True, pid, возвращаемый подпроцессом, - это процесс оболочки, используемый для запуска команды.

...