4

为什么子进程 pid ( ) 与命令返回Popen.pid的值不同?ps

ps当从 python 内部(with 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 报告的 pidps比 报告的 pid 多 1 或 2 个Popen.pid

4

1 回答 1

5

因为该命令是用 运行的shell=True,所以 subprocess 返回的 pid 是用于运行该命令的 shell 进程的 pid。

于 2010-12-14T20:59:21.937 回答