python-2.7 - 如何不杀死python中另一个进程打开的子进程?
问题描述
我想从 python 脚本中运行我也用 python 开发的程序。但是我想杀死我的脚本,而不是我为它打开的程序。
我正在为这样的子进程打开我的程序:
prog = subprocess.Popen(
[python_path, "-m", "myprogram", "start"],
stdout=open(os.devnull, 'w'),
stderr=open(os.devnull, 'w')
)
两者都运行得很好,但是当我杀死我的脚本时,我的程序被一起杀死了。有什么办法可以阻止我的程序一起完成吗?
解决方案
显然这是 Windows 的问题。当发出一个信号来终止脚本时,该信号将传递给子进程,即 myprogram。解决它的一种方法是在 Popen 列表中包含“creationflags = subprocess.CREATE_NEW_PROCESS_GROUP”作为参数。
prog = subprocess.Popen(
[python_path, "-m", "myprogram", "start"],
stdout=open(os.devnull, 'w'),
stderr=open(os.devnull, 'w'),
creationflags=subprocess.CREATE_NEW_PROCESS_GROUP,
)
Windows 将标志传递给同一组中的所有进程,因此添加“creationflags”将为 myprogram 创建一个新组,并且在您只想杀死脚本时不会被杀死。
推荐阅读
- c++ - 如何在同一个 srand() 种子中获得两个不同的随机数?C++
- digital-ocean - 如何在 DigitalOcean 上桥接两个 Kubernetes 集群?
- javascript - 如何将变量从javascript传递给php?
- storybook - 在 Storybook 中更改 MDX 故事的背景颜色
- javascript - Object.assign 查询
- jenkins - 在 dsl-job 脚本中的 groovy 中打印方法的可用签名
- android - 如何在 android studio 中禁用 captcha Otp 验证
- omnet++ - 阻止车辆和 RSU 之间的通信
- amazon-web-services - 停止 Azure Pipeline AWS ECR 推送任务,从存储库名称中删除正斜杠
- tensorflow - 了解 tf.keras.Input 中的形状?