我正在OSX上运行Python3;到目前为止,我一直在使用由终端启动的控制台应用程序),据我所知,终端正在生成进程,它们是生成程序的子进程,因此当这种情况消失时,所有子进程都将终止
虽然,现在我运行的是UI;试过了TKinter,然后转到PyQt5。在这种情况下,我遇到了一些问题,我的测试过程没有像在终端中发生的那样关闭,而是像僵尸一样挂起。虽然我相信僵尸进程不是什么大问题,但我担心的是,就进程所有权而言,我无法控制或理解“谁在掌舵”
有没有一种方法可以得到一种树,关于哪个进程在另一个进程(或多个进程)上运行;这样我就可以处理订单并关闭正确的订单了?同样出于某种原因,即使给僵尸进程一个sudo kill -9
也不会杀死它;所以我真的很想知道在后端发生了什么,并正确地处理事情
PyQt是实际Qt C代码的Python绑定,当您启动PyQt应用程序时,您将启动Python进程和cqt循环进程
您还有僵尸进程,因为当您终止python进程时,并不一定要终止C进程
在PyQt中,当一个Qt对象被删除时,它会删除所有其他与之相关的Qt对象(子对象、子对象等),但是如果有一个Qt对象没有父对象或者无法访问,它将成为一个僵尸进程,你将无法杀死它,除非你重置你的电脑或你找到并杀死Qt循环
因此,为了让你的生活更轻松,你应该设置你的代码有1个主要对象和所有其他对象应该是相关的,所以当你终止你的应用程序时,你需要做的就是删除一个对象和所有其他对象的将被正确删除
在一个简单的应用程序中,您只需要以下内容:
退出由
sys.exit(app.exec_())
处理,所有应用程序对象都从main继承但是,如果您想在执行期间删除Qt对象,就不能像在python中那样删除它。必须让Qt通过将其设置为删除来处理删除:
在这个答案中,你可以通过ekhumoro得到更好的解释
相关问题 更多 >
编程相关推荐