Ответ 1
Если вы запустите process = subprocess.Popen(...)
, вы можете завершить процесс позже, используя process.terminate()
.
Если подпроцесс может создавать свои собственные дети, то process.terminate()
и/или process.kill()
может быть недостаточно. В Windows вам может потребоваться создать объект Job и назначить ему процесс .exe
. В Unix вы можете использовать start_new_session=True
(preexec_fn=os.setsid
или preexec_fn=os.setpgrp
для более ранних версий Python) плюс os.pgkill(process.pid, signal.SIGINT)
для уничтожения процессов, принадлежащих к той же группе процессов (или prctl(PR_SET_PDEATHSIG, ...)
в Linux, для отправки сигнала, когда родительский умирает). См.
- Как завершить подпроцесс python, запущенный с помощью оболочки = True
- Python: как убить дочерний процесс (ы), когда родитель умирает?
См. также killableprocess.py