subprocess.Popen
使用for python3.2+
under启动新进程的这两个选项有什么区别Linux
:
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
)测试了我的代码,它们似乎对我来说都可以正常工作。
但我想知道这里最好的选择是什么——一个 withpreexec_fn
还是那个 with start_new_session
?