2017-03-15 26 views
0
def playvid(self): 
    proc1 = subprocess.Popen("gst-launch-1.0 videotestsrc ! autovideosink", shell=True) 
    time.sleep(3) 
    os.killpg(os.getpgid(proc1.pid),signal.SIGTERM) 

この関数は、(TKライブラリを使用して作成された)ボタンを押すと呼び出されます。 3秒後、私のプログラム全体(GUI画面と一緒に)はサブプロセスだけでなく殺されます。これを修正し、サブプロセスproc1のみが強制終了されるようにするにはどうすればよいですか。サブプロセスを終了するとPythonプログラムが終了する

は子供への信号信号を送信し

Popen.send_signal(信号):あなたはsubprocessのマニュアルを読んでいる場合

+0

ドキュメントから:os.getpgid(PID) は、プロセスID pidを持つプロセスのプロセス・グループIDを返します 。 pidが0の場合は、現在のプロセスのプロセスグループIDが返されます。 – stovfl

+0

特定のサブプロセスだけを強制終了するにはどうすればいいですか? – Ajayv

答えて

0

の中から選択するいくつかの方法があります。

Windowsでは、SIGTERMはterminate()の別名です。

Popen.terminate()

子を停止します。 Posix OSでは、このメソッドは子にSIGTERMを送信します。 Windowsでは、Win32 API関数TerminateProcess()が子を停止するために呼び出されます。

Popen.kill()

キル子。 Posix OSでは、関数は子にSIGKILLを送信します。 Windowsでは、kill()はterminate()のエイリアスです。

私が使用します。

proc1.terminate() 
関連する問題