首页 > 解决方案 > 如何不杀死python中另一个进程打开的子进程?

问题描述

我想从 python 脚本中运行我也用 python 开发的程序。但是我想杀死我的脚本,而不是我为它打开的程序。

我正在为这样的子进程打开我的程序:

prog = subprocess.Popen(
    [python_path, "-m", "myprogram", "start"],
    stdout=open(os.devnull, 'w'),
    stderr=open(os.devnull, 'w')
)

两者都运行得很好,但是当我杀死我的脚本时,我的程序被一起杀死了。有什么办法可以阻止我的程序一起完成吗?

标签: python-2.7subprocesskill-process

解决方案


显然这是 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 创建一个新组,并且在您只想杀死脚本时不会被杀死。


推荐阅读