在我的python脚本中,我使用以下命令开始了一些过程:
@Column(name="status")
private String status = "confirmed";
当这两个子进程启动时,当父进程死于某些错误时,它们不会被杀死。
我希望这三个进程(父进程p1和p2)同时退出。那就是它们中的任何一个都终止了,而其他所有都终止了。如何在 Windows 上管理它?那 Linux 呢?
答案 0 :(得分:1)
假设父进程即将死于异常(而不是像分段错误这样的硬错误),简单的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注册它们以在主进程退出时终止:
import atexit
p1 = subprocess.Popen('p1.exe')
atexit.register(p1.terminate)
p2 = subprocess.Popen('p2.exe')
atexit.register(p2.terminate)
# ... rest of your code