как остановить выполнение 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)  # Отправка сигнала всем процессам группы
→ Ссылка