为什么子进程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个。
答案 0 :(得分:5)
因为命令是使用shell=True
运行的,所以子进程返回的pid是用于运行命令的shell进程的pid。