请教, Python 执行外部程序,并且获取外部程序的 pid

2019-07-26 11:12:55 +08:00
 rj2
请教,python 执行外部程序,并且获取外部程序的 pid。目前操作获取到的都是 python 的 pid 以及 cmd 的 pid,获取不到运行了的外部程序的 pid。请教大佬
3968 次点击
所在节点    Python
21 条回复
linxiaoziruo
2019-07-26 11:14:47 +08:00
我就纳闷儿了,我啥时候发的这个帖子
smallpython
2019-07-26 11:22:06 +08:00
自问自答
太优秀了
zjb861107
2019-07-26 11:29:58 +08:00
不是通过 subprocess 创建的子进程吗,子进程的 pid 可以直接拿到啊。
但是,如果是子进程再创建的子进程,就不一定行了。研究一下进程组试试。
rj2
2019-07-26 11:33:55 +08:00
@zjb861107 试了下, 拿到的不是打开的外部程序的 pid
rj2
2019-07-26 11:34:23 +08:00
@linxiaoziruo 我也懵逼了 吓得我 看了再看看
SbloodyS
2019-07-26 11:54:11 +08:00
执行一下 ps aux 就好了
est
2019-07-26 12:02:34 +08:00
仔细看文档了么?把文档里你调用的方法的文档复制过来看看 ctrl+f 一下 pid
www5070504
2019-07-26 12:19:02 +08:00
如果 subprocess 拿不到的话 用 psutil 查询一遍所有进程的名字和试试用父进程 pid 呢
www5070504
2019-07-26 12:19:42 +08:00
感觉直接用 psutil 查一遍是最省事的了。。
ysc3839
2019-07-26 13:26:50 +08:00
贴代码看看?
Sylv
2019-07-26 13:31:55 +08:00
哈哈,一楼我没反应过来,还以为楼主精分了。
chinazz
2019-07-26 13:50:57 +08:00
# 创建进程
p = subprocess.Popen(cmd_, shell=True, cwd=, stdin=, stdout=, stderr=)
# 获得 pid
pid = p.pid
# 监听
glan = psutil.Process(pid)
chinazz
2019-07-26 13:51:43 +08:00
subprocess 是可以拿到 pid 的
rj2
2019-07-26 14:06:53 +08:00
@chinazz 抱歉, 应该是我的表述有误。就是我想获取的 pid 是子进程运行后再创建的子进程。
#创建进程
p = subprocess.Popen('unins000.exe')
#获取 exe 的 pid
pid = p.pid
但是这个 exe 运行后,会有一个进程 pid。请问这个 pid 怎么获取。
j0hnj
2019-07-26 14:26:15 +08:00
你这个表达能力真的堪忧…
你想做的应该是子进程的子进程的 pid, 如果 unins000.exe 不是自己能控制的话,直接通过 subprocess 是拿不到它的子进程的 pid 的,
只能是用 psutil 遍历全部的 pid, 筛选出 parenet_pid == unins00.exe pid 的那些进程
j0hnj
2019-07-26 14:26:58 +08:00
@j0hnj #15 typo: parenet_pid => parent_pid
rj2
2019-07-26 14:33:03 +08:00
@j0hnj 是的,确实是我的表述问题。嗯,psutil 遍历全部 pid,做筛选。其实我想拿到的是孙进程,我也是刚回过神来。谢了。
ClericPy
2019-07-26 15:08:05 +08:00
for proc in psutil.process_iter():
try:
pname = proc.name()

我是用这种方法 kill 东西的, 用 psutil 的好处是兼容 linux / win

这里贴代码缩进真淡腾... 简单的说就是 psutil 去找匹配的进程, 然后杀之, 平时用 subprocess 里的那种 kill 在部分场景如果不小心可能会搞出僵尸进程 /孤儿进程什么的, linux 上还得设置 close_fds 什么的, 不如 psutil 简单

https://github.com/ClericPy/ichrome/blob/master/ichrome/base.py#L335
rj2
2019-07-26 15:22:05 +08:00
@ClericPy 嗯嗯
douglas1997
2019-07-26 16:47:11 +08:00
看到一楼笑出声。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/586364

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX