У меня есть script, который запускает файл .exe через subprocess.Popen()
, но я просто понял, что .exe файл продолжает работать даже после закрытия моего script. Есть ли способ остановить запуск .exe файла по имени или идентификатору? Этот файл exe не преобразован из файла py, поэтому я застрял.
Как уничтожить файл .exe(не преобразованный из py), запустив его как те же script
Ответ 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