2017-03-15 260 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程序

+0

從DOC:os.getpgid(PID) 返回進程ID PID的進程的進程組ID。如果pid爲0,則返回當前進程的進程組標識。 – stovfl

+0

我該如何殺死特定的子進程? – Ajayv

回答

0

如果你讀了subprocess的文檔有幾種方法可供選擇:

Popen.send_signal(信號)

將信號發送信號給孩子。

在Windows上,SIGTERM是terminate()的別名。

Popen.terminate()

停止孩子。在Posix操作系統上,該方法向孩子發送SIGTERM。在Windows上調用Win32 API函數TerminateProcess()來停止子進程。

Popen.kill()

殺死了孩子。在Posix操作系統上,該函數向孩子發送SIGKILL。在Windows上,kill()是terminate()的別名。

我會用:

proc1.terminate()