我在杀死子进程时遇到问题。以下代码用于创建子流程-
while(not myQueue.empty()):
p=Popen(myQueue.get(),shell=True,stdin=PIPE,stderr=PIPE)
我通过迭代直到队列(其中包含命令)为空来创建进程。变量 p 是全局变量,是 Popen 类型的对象。即使命令完成了它应该做的事情,我也遇到了停止按钮的问题,它没有像我预期的那样停止进程。
停止按钮代码如下——
stop=Button(textBoxFrame,text="Stop",width=5,command=stopAll)
stop.grid(row=1,column=4)
stopAll 方法由上面的停止按钮调用,它将终止当前子进程 p。
def stopAll():
p.kill()
注意-没有错误、异常或任何编译问题。
更新:
问题是p.kill()
没有杀死我需要杀死的进程。我用 unix 用>> ps aux
. 我还制作了我的程序来输出启动和终止 PID,以便我可以使用ps aux
. 我发现我需要杀死的进程距离 6 个 PID p.pid
,我尝试杀死os.kill((p.pid)+6,signal.SIGKILL)
正在工作的进程并停止正确的进程。但我不想那样做,因为有可能导致不同的子进程被杀死。我正在提供有关我的问题的更多详细信息-
我在这里使用的队列包含我之前所说的命令。命令是这样的-
echo "Hello"|festival --tts
Festival 是 unix 中的语音合成器,可festival --tts
从文件中获取用户输入。我正在"Hello"
参加音乐节,它正确地说出了这些话。但是p
执行上述命令的过程是杀死echo
而不是festival
。所以请帮助我杀死特定的(节日)过程。