流程所有权以及如何管理其ord

2024-05-18 12:23:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在OSX上运行Python3;到目前为止,我一直在使用由终端启动的控制台应用程序),据我所知,终端正在生成进程,它们是生成程序的子进程,因此当这种情况消失时,所有子进程都将终止

虽然,现在我运行的是UI;试过了TKinter,然后转到PyQt5。在这种情况下,我遇到了一些问题,我的测试过程没有像在终端中发生的那样关闭,而是像僵尸一样挂起。虽然我相信僵尸进程不是什么大问题,但我担心的是,就进程所有权而言,我无法控制或理解“谁在掌舵”

有没有一种方法可以得到一种树,关于哪个进程在另一个进程(或多个进程)上运行;这样我就可以处理订单并关闭正确的订单了?同样出于某种原因,即使给僵尸进程一个sudo kill -9也不会杀死它;所以我真的很想知道在后端发生了什么,并正确地处理事情


Tags: 订单程序应用程序终端ui进程tkinter过程
1条回答
网友
1楼 · 发布于 2024-05-18 12:23:47

PyQt是实际Qt C代码的Python绑定,当您启动PyQt应用程序时,您将启动Python进程和cqt循环进程

您还有僵尸进程,因为当您终止python进程时,并不一定要终止C进程

在PyQt中,当一个Qt对象被删除时,它会删除所有其他与之相关的Qt对象(子对象、子对象等),但是如果有一个Qt对象没有父对象或者无法访问,它将成为一个僵尸进程,你将无法杀死它,除非你重置你的电脑或你找到并杀死Qt循环

因此,为了让你的生活更轻松,你应该设置你的代码有1个主要对象和所有其他对象应该是相关的,所以当你终止你的应用程序时,你需要做的就是删除一个对象和所有其他对象的将被正确删除

在一个简单的应用程序中,您只需要以下内容:

app = QApplication(sys.argv)
main = MainObject()
main.show()
sys.exit(app.exec_())

退出由sys.exit(app.exec_())处理,所有应用程序对象都从main继承

但是,如果您想在执行期间删除Qt对象,就不能像在python中那样删除它。必须让Qt通过将其设置为删除来处理删除:

object.deleteLater()

在这个答案中,你可以通过ekhumoro得到更好的解释

相关问题 更多 >

    热门问题