【问题标题】:C program - Segmentation Fault - popen: Too many open files - sh: 0: Pipe call failedC程序-分段错误-popen:打开的文件太多-sh:0:管道调用失败
【发布时间】:2021-08-29 19:09:37
【问题描述】:

我的 C 程序在运行 1 小时 30 后崩溃。我得到一个“分段错误”。 我通过 gdb 进行调试,但出现了错误:

sh: 0: Pipe call failed
popen: Too many open files

我检查了我的代码,对于所有 popen 命令,我将 pclose,同上用于打开/关闭。 但是,我仍然得到相同的行为。

我能做什么? 感谢您的帮助。

问候,

【问题讨论】:

  • 一小时三十分钟后?最好的猜测是您没有完全平衡每个打开/关闭,但没有任何代码可以看到。但是,错误是“打开的文件太多”还是“分段错误”?您是检查每个文件是否已成功打开,还是只是希望?
  • sh: 0: Pipe call failed 你是从你的程序中执行命令吗?

标签: c segmentation-fault popen


【解决方案1】:

我检查了我的代码,对于所有 popen 命令,我将 pclose,同上用于打开/关闭。

这些远不是打开文件描述符的唯一调用。其他一些是duppipesocket 等。

我能做什么?

strace -e file ... 下运行你的程序——如果opens 不断返回越来越高的文件描述符,你肯定有文件描述符泄漏,查看strace 的输出应该可以让你猜出它发生在哪里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2021-01-15
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多