[[Windows,python]如何使由subprocee.Popen()启动的进程在父进程死亡时自动终止?

问题描述 投票:0回答:1

在我的python脚本中,我使用以下方法开始了一些过程:

p1 = subprocess.Popen('p1.exe')
p2 = subprocess.Popen('p2.exe')

这两个子流程启动时,当父流程死于某些错误时,它们不会被杀死。我希望这三个进程,父进程,p1和p2同时退出。那是它们中的任何一个都终止了,而其他所有都终止了。如何在Windows上进行管理?那Linux呢?

python windows subprocess
1个回答
0
投票

[假设父进程死于异常(而不是像分段错误这样的硬错误),那么简单的try / finally可以保证在退出块时终止进程(通过执行结束时结束) ,冒泡的异常,return提早离开函数等):

p1 = p2 = None  # Ensure names exist
try:
    p1 = subprocess.Popen('p1.exe')
    p2 = subprocess.Popen('p2.exe')
    # ... stuff that runs in tandem with processes

finally:
    for p in (p1, p2):
        if p is not None:
            p.terminate()

如果您希望子进程更干净地关闭,一个简单的with语句就足够了(std句柄将被关闭,您将等待每个进程):

with subprocess.Popen('p1.exe') as p1, subprocess.Popen('p2.exe') as p2:
    # ... stuff that runs in tandem with processes

如果要启动进程并在父进程启动时一直运行,则当主进程退出时,您可以使用the atexit module注册它们以终止进程。

atexit
© www.soinside.com 2019 - 2024. All rights reserved.