Qt 上的“GLib-ERROR **:无法创建管道主循环唤醒:打开的文件太多”

Posted

技术标签:

【中文标题】Qt 上的“GLib-ERROR **:无法创建管道主循环唤醒:打开的文件太多”【英文标题】:"GLib-ERROR **: Cannot create pipe main loop wake-up: Too many open files" on Qt 【发布时间】:2013-07-31 22:40:08 【问题描述】:

我正在开发 Ubuntu。当我大约在 1 小时后运行我的程序时,我收到了这个错误:

GLib-ERROR **: Cannot create pipe main loop wake-up: Too many open files 程序意外结束。

当我使用 gdb 运行时,它不会崩溃。

我不明白为什么?这个错误的原因是什么?

非常感谢..

【问题讨论】:

解决方案在这里:***.com/questions/17038133/… 【参考方案1】:

打开的文件太多

很明显。可能你的文件描述符有泄漏,所以你应该检查你的代码是否打开了很多文件/文件描述符但没有正确关闭它们。如果你 fork 一个进程,你还应该考虑在开始实际进程之前关闭它们,因为这也可能是一个常见的错误。

操作系统有一个有限的表,它可以维护多少个文件描述符,显然你超出了这个限制。

【讨论】:

我在我的项目中使用 QAccessNetworkManager。这里的“文件描述符”是什么?? 错误来自操作系统,即使 iof 文件隐藏在类中的某个位置,您仍然必须确保它们已正确关闭。由于您没有提供任何示例代码,因此很难说您做错了什么。 在 linux 上,一切都是文件。你可以看看使用了哪些打开的文件:lsof。可能会给你一个很长的清单。您可以通过以下方式过滤:lsof -i 用于套接字连接,lsof -f 用于真实文件流,... 抱歉,我现在明白你的意思了.. 我该怎么办?或者我的项目有什么错误?因为我用 Valgrind 分析过。肯定丢失了大约 30 MB .. 它有什么相关性吗? 30MB 听起来像是一个开始。 :) 我很确定这些类有适当的代码来关闭文件,如果他们保留一些,但如果你不删除它们,这不会发生。所以我会接受 valgrind 告诉你的。

以上是关于Qt 上的“GLib-ERROR **:无法创建管道主循环唤醒:打开的文件太多”的主要内容,如果未能解决你的问题,请参考以下文章

C++、命名空间、继承类和 Qt 上的名称查找

LXSession 上的 Qt4 WindowsStayOnTop

Windows上的Qt 5.7黑屏

蓝牙与 Android 上的 Qt。通过抽象类上的jni调用java类

RaspberryPi 上的 Qt - QXmlAttributes 隐式声明

Qt主窗口上的图标不设置[重复]