如何不杀死 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新建一个组,只杀脚本时不会被杀.
我也想从 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新建一个组,只杀脚本时不会被杀.