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

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

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

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

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

非常感谢..

【问题讨论】:

标签: qt crash gdb


【解决方案1】:

打开的文件太多

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

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

【讨论】:

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