What is the difference between these two options to start a new process with 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
I need this as I need to set process group ID to have a possibility to kill at once this process and all of its children. This is then used in the case if the process run time exceeds certain threshold:
try:
out, err = proc.communicate(timeout=time_max)
except subprocess.TimeoutExpired:
os.killpg(os.getpgid(proc.pid), signal.SIGTERM)
I tested my code with the both options (#1
& #2
) and they both seem to work ok for me.
But I wonder what is the best option here - the one with preexec_fn
or the one with start_new_session
?