1
linxiaoziruo 2019-07-26 11:14:47 +08:00
我就纳闷儿了,我啥时候发的这个帖子
|
2
smallpython 2019-07-26 11:22:06 +08:00
自问自答
太优秀了 |
3
zjb861107 2019-07-26 11:29:58 +08:00
不是通过 subprocess 创建的子进程吗,子进程的 pid 可以直接拿到啊。
但是,如果是子进程再创建的子进程,就不一定行了。研究一下进程组试试。 |
5
rj2 OP @linxiaoziruo 我也懵逼了 吓得我 看了再看看
|
6
SbloodyS 2019-07-26 11:54:11 +08:00
执行一下 ps aux 就好了
|
7
est 2019-07-26 12:02:34 +08:00
仔细看文档了么?把文档里你调用的方法的文档复制过来看看 ctrl+f 一下 pid
|
8
www5070504 2019-07-26 12:19:02 +08:00
如果 subprocess 拿不到的话 用 psutil 查询一遍所有进程的名字和试试用父进程 pid 呢
|
9
www5070504 2019-07-26 12:19:42 +08:00
感觉直接用 psutil 查一遍是最省事的了。。
|
10
ysc3839 2019-07-26 13:26:50 +08:00 via Android
贴代码看看?
|
11
Sylv 2019-07-26 13:31:55 +08:00 via iPhone
哈哈,一楼我没反应过来,还以为楼主精分了。
|
12
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) |
13
chinazz 2019-07-26 13:51:43 +08:00
subprocess 是可以拿到 pid 的
|
14
rj2 OP @chinazz 抱歉, 应该是我的表述有误。就是我想获取的 pid 是子进程运行后再创建的子进程。
#创建进程 p = subprocess.Popen('unins000.exe') #获取 exe 的 pid pid = p.pid 但是这个 exe 运行后,会有一个进程 pid。请问这个 pid 怎么获取。 |
15
j0hnj 2019-07-26 14:26:15 +08:00
你这个表达能力真的堪忧…
你想做的应该是子进程的子进程的 pid, 如果 unins000.exe 不是自己能控制的话,直接通过 subprocess 是拿不到它的子进程的 pid 的, 只能是用 psutil 遍历全部的 pid, 筛选出 parenet_pid == unins00.exe pid 的那些进程 |
17
rj2 OP @j0hnj 是的,确实是我的表述问题。嗯,psutil 遍历全部 pid,做筛选。其实我想拿到的是孙进程,我也是刚回过神来。谢了。
|
18
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 |
20
douglas1997 2019-07-26 16:47:11 +08:00
看到一楼笑出声。
|
21
ranlele 2019-09-02 15:25:25 +08:00
我今天也尝试了这个,当设置 shell=False 时,返回的 pid 为执行 shell 命令之后开启的进程的 pid。
|