如何不杀死 python 中另一个进程打开的子进程?

How not to kill a subprocess opened by another process in python?

我也想从 python 脚本到 运行 我在 python 开发的程序。但是我想终止我的脚本,而不是我为它打开的程序。

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

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

两者都运行完美,但是当我杀死我的脚本时,我的程序也一起被杀死了。有什么办法可以防止我的程序一起定型吗?

显然这是 Windows 的问题。当给出终止脚本的信号时,该信号将传递给子进程,即 myprogram。解决它的一种方法是将 "creationflags = subprocess.CREATE_NEW_PROCESS_GROUP" 作为 Popen 列表中的参数。

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把sign传递给同组的所有进程,所以加"creationflags"会为myprogram新建一个组,只杀脚本时不会被杀.