在 Linux
下使用 subprocess.Popen
开始一个新进程的两个选项:python3.2+
有何不同?
proc = subprocess.Popen(args, ..., preexec_fn=os.setsid) # 1
proc = subprocess.Popen(args, ..., start_new_session=True) # 2
我需要这个功能,因为我需要设置进程组ID,以便有可能立即终止此进程及其所有子进程。这将用于在进程运行时间超过某个阈值的情况下:
try:
out, err = proc.communicate(timeout=time_max)
except subprocess.TimeoutExpired:
os.killpg(os.getpgid(proc.pid), signal.SIGTERM)
我用两种选项(#1
和#2
)都测试了我的代码,看起来它们对我来说都可以正常工作。
但我想知道在这里什么是最好的选择——带有preexec_fn
的选项还是带有start_new_session
的选项?