Я пытаюсь сделать эквивалент следующим использованием подпроцесса Python:как убить группу процессов с помощью Python подпроцесс
>cat /var/log/dmesg | festival --tts &
[1] 30875
>kill -9 -30875
Обратите внимание, что я Уничтожение процесса группу (как обозначено знаком минус добавив идентификационный номер процесса), чтобы убить все детские процессы.
В Python у меня есть следующий код, в котором два процесса создаются и связаны через трубу.
process_cat = subprocess.Popen([
"cat",
"/var/log/dmesg"
], stdout = subprocess.PIPE)
process_Festival = subprocess.Popen([
"festival",
"--tts"
], stdin = process_cat.stdout, stdout = subprocess.PIPE)
Как я должен убить эти процессы и их дочерние процессы таким образом, который эквивалентен приведенному выше методу Bash? Следующий подход является недостаточным, поскольку он не убивает дочерние процессы:
os.kill(process_cat.pid, signal.SIGKILL)
os.kill(process_Festival.pid, signal.SIGKILL)
есть более элегантный способ сделать это, возможно, используя только один процесс?
Почему недостаточно? Возможно, посмотрите на 'os.setprgid' – betterworld
Это недостаточно, потому что он не убивает дочерние процессы фестиваля. Я отредактирую вопрос для ясности. – d3pd