gpt4 book ai didi

python - 获取 Python 子进程中终端内执行的命令的进程 ID

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:07 25 4
gpt4 key购买 nike

我在 Python 子进程中的 gnome-terminal 中运行 vim:

>>> import subprocess
>>> cmd=['gnome-terminal', '--', 'vim']
>>> p = subprocess.Popen(cmd)

可以使用 p.pid 获取 gnome-terminal 的进程 ID,但如何从 Python 脚本中获取 vim 的进程 ID?

尽管 Bash 中的 pstree 将 vim 显示为 gnome-terminal 的子进程,但 psutils 并未将其列出。

>>> import psutil
>>> terminal_process = psutil.Process(p.pid)
>>> terminal_process.children()
[]

最佳答案

此行为是由 gnome 终端引起的。

如果您键入命令 ps | grep <pid>在你的 shell 中,你会看到类似于 <pid> pts/0 00:00:00 gnome-terminal <defunct> 的内容.

一个进程被解散意味着它已经完成了它的任务并且正在等待被杀死(或者行为不端,这里不是这种情况)。这意味着您从 python 启动的进程已完成其工作并正在等待 python 杀死它。

现在,如果您查看 pstree ,您将看到另一个 gnome-terminal 进程已在根级别生成。这意味着您在 Python 中启动的 gnome-terminal 进程只是在根级别启动“真正的终端进程”并退出。如果您进一步调查并使用 ps aux | grep gnome-terminal 查找以 gnome-terminal 开头的进程,您将看到如下输出:

root      5047  0.0  0.0      0     0 pts/0    Z    10:07   0:00 [gnome-terminal] <defunct>
root 5053 0.0 0.3 595276 30468 ? Sl 10:07 0:00 /usr/lib/gnome-terminal/gnome-terminal-server
root 7147 0.0 0.0 12780 972 pts/0 S+ 10:17 0:00 grep gnome-terminal

有你现在不存在的进程,和一个新的 gnome-terminal-server过程。 gnome-terminal-server是您正在寻找的过程。

长话短说 pgrep -f gnome-terminal-server将返回您想要的 pid。

关于python - 获取 Python 子进程中终端内执行的命令的进程 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55880659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com