如何定位已启动但失去控制的进程?
在使用 multiprocessing 启动进程时,可能会遇到进程 a 终止而留有处于活动状态的进程 b 的情况。这时,需要找到已启动的进程 b 并将其停止。
以下是几种可以用来查找和停止已启动进程的方法:
1. 保存进程 pid
在启动进程 b 时,将 b 的 pid 保存到文件中。当需要停止进程 b 时,读取文件中的 pid 并使用 kill 命令将其停止。
# 保存进程b的pid with open("process_b.pid", "w") as file: file.write(str(p.pid))
# 使用kill命令来停止进程b kill $(cat process_b.pid)
2. 使用进程组
设置进程 b 为进程组的组长,当进程 a 退出时,进程 b 也将退出。
os.setpgid(0, 0)
保存进程 b 组的组 id 到文件中。
with open("process_b_gid", "w") as file: file.write(str(os.getpgid(p.pid)))
停止进程 b 组:
kill -- -$(cat process_b_gid)
3. 命令行工具
使用 ps 命令查找进程 b:
ps aux | grep '进程b的一些特征'
4. 第第三方库
安装 psutil 库并使用其 psutil.process_iter 函数查找进程 b:
for proc in psutil.process_iter(['pid', 'name', 'cmdline']): if '进程B的一些特征' in proc.info['name'] or '进程B的一些特征' in str(proc.info['cmdline']): print(f"找到进程B: PID={proc.info['pid']}")