サブプロセスの強制終了に問題があります。次のコードは、サブプロセスの作成に使用されます-
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
。強制終了する必要のあるプロセスが6PID離れていることがわかりました。動作しているプロセスを強制終了してp.pid
、os.kill((p.pid)+6,signal.SIGKILL)
正しいプロセスを停止してみました。しかし、さまざまな子プロセスが強制終了される可能性があるため、そのようにはしたくありません。私は私の問題についてより多くの詳細を与えています-
ここで使用しているキューには、前に述べたようにコマンドが含まれています。コマンドは次のようなものです-
echo "Hello"|festival --tts
FestivalはUNIXの音声合成装置でありfestival --tts
、ファイルからユーザー入力を取得します。私は"Hello"
お祭りに向かっています、そしてそれは言葉を正しく言います。しかしp
、上記のコマンドを実行するプロセスは、殺害であり、ではecho
ありませんfestival
。だから、特定の(フェスティバル)プロセスを殺すのを手伝ってください。