【问题标题】:How not to kill a subprocess opened by another process in python?如何不杀死python中另一个进程打开的子进程?
【发布时间】:2019-08-12 13:29:32
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python-2.7 subprocess kill-process


    【解决方案1】:

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

    【讨论】: