python - 子进程 pid 与 ps 输出不同

标签 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报告的多1或2。

最佳答案

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

关于python - 子进程 pid 与 ps 输出不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4444141/

相关文章:

pid - 将事件从 GenEvent 服务器转发到我在 elixir otp 中的进程

bash - 是否有一个 shell 命令可以杀死所有后台 tail 进程

python - Cmake - 使用 OpenCV 生成共享库

python - 将数组四舍五入为另一个数组中给定的值

rust - 如何在Rust的子过程中准备stdout/stderr

python - 如何重定向子进程的标准输出?

MySQL SELinux 冲突 Fedora 19

python - 如何计算 DataFrame 中连续 TRUE 的数量?

python - 变量传递给 python 函数线程安全吗?

python - 在 Windows 中使用子进程 Popen.send_signal(CTRL_C_EVENT) 时如何达到预期的结果?