首页 > 解决方案 > python 使用 subprocess.Popen 时如何结束子进程?

问题描述

我使用一个脚本来运行两个脚本。像这样的代码:

import subprocess

subprocess.Popen("python a.py", shell=True)
subprocess.Popen("python b.py", shell=True)

但是如果我结束主脚本,a.py 和 b.py 的子进程仍在运行。如何解决?

添加:

a.py 和 b.py 是两个服务器脚本。当我使用ctrl+c结束主脚本时,两台服务器都没有结束。那么当我结束主脚本时如何结束所有进程?

标签: pythonpopen

解决方案


通过杀死进程。

import subprocess

p1 = subprocess.Popen("python a.py", shell=True)
p2 = subprocess.Popen("python b.py", shell=True)

# ... do things ...

p1.kill()
p2.kill()

您还可以使用atexit模块自动执行此操作:

import subprocess
import atexit

p1 = subprocess.Popen("python a.py", shell=True)
p2 = subprocess.Popen("python b.py", shell=True)
atexit.register(p1.kill)  # register for killing
atexit.register(p2.kill)

# ... do things ...

推荐阅读