как остановить выполнение bash скрипта из python 3
Есть скрипт следующего содержания:
#!/bin/sh
$1
exit
Запускаю его в новом процессе
subprocess.run(["bash", "script", "command"])
Насколько я знаю, функция run() ждет окончания выполнения процесса, но как мне программно получить доступ к запущенному процессу и остановить его выполнение?
Ответы (1 шт):
Автор решения: D. Violet
→ Ссылка
Используйте группу процессов, чтобы разрешить отправку сигнала всем процессам в группах. Для этого вы должны прикрепить идентификатор сеанса к родительскому процессу порожденных / дочерних процессов, который является оболочкой в вашем случае. Это сделает его лидером группы процессов. Итак, теперь, когда сигнал отправляется руководителю группы процессов, он передается всем дочерним процессам этой группы.
import os
import signal
import subprocess
# The os.setsid() передается в аргументе preexec_fn поэтому
# он запускается после fork() и перед exec() для запуска оболочки.
pro = subprocess.Popen(cmd, stdout=subprocess.PIPE,
shell=True, preexec_fn=os.setsid)
os.killpg(os.getpgid(pro.pid), signal.SIGTERM) # Отправка сигнала всем процессам группы