PyQt应用程序正常关闭,但进程未被杀死?

4 投票
3 回答
2774 浏览
提问于 2025-04-17 21:35

我刚发现,当我运行一个pyqt应用程序并关闭它时,虽然应用程序关闭了,但后台的进程仍然在运行。看起来即使我关闭了应用程序,那个进程也没有结束。

Traceback (most recent call last):
  File "F:\Projects\XYZ\XYZ\XYZ.py", line 414, in <module>
    sys.exit(app.exec_())
SystemExit: 0

我在网上查了一下,发现如果返回值是0,那就表示正常结束。但是你可以看到,随着我运行应用程序,进程一直在增加。

在这里输入图片描述

那我该怎么解决这个问题呢?

3 个回答

1

你试过以下方法吗?

sys.exit(app.exec_)

这是PyQt开发者常用的一种做法,也是一个简单的方式来干净利落地退出你的程序。不过,你应该把Python升级到2.7版本或3.3版本。

7

解决方案

这是我找到的一个快速解决办法,可以用来解决这个问题。

import psutil, os

def kill_proc_tree(pid, including_parent=True):    
    parent = psutil.Process(pid)
    for child in parent.children(recursive=True):
        child.kill()
    if including_parent:
        parent.kill()


app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow() # <-- Instantiate QMainWindow object.
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
app.exec_()


me = os.getpid()
kill_proc_tree(me)
2

这看起来是IDLE特有的问题。

在Python的错误追踪网站上,有几个相关的问题(比如 809312540),不过这些问题现在都已经关闭,并且标记为“已修复”。

因为你似乎在使用一个非常旧的Python版本(2.5),所以你可以通过升级来解决这个问题。

撰写回答