【问题标题】:Killing a subprocess exits Python program杀死一个子进程退出 Python 程序
【发布时间】:2017-08-05 19:23:28
【问题描述】:
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 被杀死。

【问题讨论】:

  • 来自文档:os.getpgid(pid) 返回进程 ID 为 pid 的进程的进程组 ID。如果pid为0,则返回当前进程的进程组id。
  • 如何单独杀死特定的子进程?

标签: python tkinter subprocess


【解决方案1】:

如果您阅读了subprocess 的文档,则有多种方法可供选择:

Popen.send_signal(信号)

向孩子发送信号信号。

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

Popen.terminate()

阻止孩子。在 Posix 操作系统上,该方法将 SIGTERM 发送给孩子。在 Windows 上,调用 Win32 API 函数 TerminateProcess() 来停止子进程。

Popen.kill()

杀死孩子。在 Posix 操作系统上,该函数将 SIGKILL 发送给孩子。在 Windows 上,kill() 是 terminate() 的别名。

我会使用:

proc1.terminate()

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多