В чем разница между этими двумя вариантами, чтобы начать новый процесс с subprocess.Popen
для python3.2+
под Linux
:Разница между subprocess.Popen preexec_fn и start_new_session в питона
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
?