在我的python脚本中,我使用以下方法开始了一些过程:
p1 = subprocess.Popen('p1.exe')
p2 = subprocess.Popen('p2.exe')
这两个子流程启动时,当父流程死于某些错误时,它们不会被杀死。我希望这三个进程,父进程,p1和p2同时退出。那是它们中的任何一个都终止了,而其他所有都终止了。如何在Windows上进行管理?那Linux呢?
[假设父进程死于异常(而不是像分段错误这样的硬错误),那么简单的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