子进程pid与ps输出不同

时间:2010-12-14 20:55:53

标签: python subprocess pid ps

为什么子进程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

ps报告的pid通常比Popen.pid报告的pid多1或2个。

1 个答案:

答案 0 :(得分:5)

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