Я пытаюсь сделать эквивалент следующего, используя подпроцесс Python:
>cat /var/log/dmesg | festival --tts &
[1] 30875
>kill -9 -30875
Обратите внимание, что я убиваю процесс group (на что указывает отрицательный знак перед идентификатором процесса), чтобы убить все дочерние процессы, запускаемые Festival.
В 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
- person betterworld   schedule 26.08.2015