2017-03-15 153 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()