python - 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结束主脚本时,两台服务器都没有结束。那么当我结束主脚本时如何结束所有进程?
解决方案
通过杀死进程。
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 ...
推荐阅读
- mysql - DJANGO 中的模型有 4 个字段,其中两个给出错误:“添加一个不可为空的字段......”。我的问题是为什么其他两个字段不给出错误
- c# - 我的 Visual Studio For Mac System.Data 上不存在 DataTable.AsEnumerable()
- python - 如何从 AI Platform 作业访问 Google Cloud Storage Bucket
- docker - 带有 ASP.NET Core 2.2 的 AWS CodeBuild Docker 映像
- java - 如何为使用 keyclaok rest api 的用户获取更多/可选数据?
- mysql - 错误:ER_NO_DB_ERROR:Node.js 中没有选择数据库?
- angular - 电子商务 Angular 应用程序的产品页面在浏览器视图源中查看时显示不同源代码的任何原因?
- c# - 每次按下按钮时,如何将字符串前面的 n 个字符连续移动到末尾?
- python - Python中模块的函数用法
- 3d-modelling - 3d 建模 - 如何制作复杂的 3d 模型?