我正在尝试使用 Python 子进程执行以下等效操作:
>cat /var/log/dmesg | festival --tts &
[1] 30875
>kill -9 -30875
请注意,我正在终止进程组(如进程 ID 号前面的负号所示)以终止所有子进程 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)
有没有更优雅的方法来做到这一点,也许只使用一个过程?