【问题标题】:Signal 11 segfault on wait() system call?wait() 系统调用上的信号 11 段错误?
【发布时间】:2009-12-07 15:37:26
【问题描述】:

我正在使用 C 语言编写一个基本的 shell。在我的 pipes 实现中,我计算了行中的命令并迭代地 fork() 一个新进程。

在每次迭代结束时,我在子节点上wait(),然后再继续执行下一个命令。这在早期代码中运行良好,但不知何故我已经破坏了它:

Program terminated with signal 11, Segmentation fault.
#0  0xfef28730 in _waitpid () from /usr/lib/libc.so.1

(gdb) backtrace
#0  0xfef28730 in _waitpid () from /usr/lib/libc.so.1
#1  0xfef28770 in _wait () from /usr/lib/libc.so.1
#2  0xfef696d1 in wait () from /usr/lib/libc.so.1
#3  0x08051428 in main ()

我知道如果子进程已经终止,wait() 只会收割僵尸进程。

为什么,在什么情况下wait() 会导致段错误?我该如何调试这种事情?

【问题讨论】:

  • 是单线程应用吗?

标签: segmentation-fault fork wait signals


【解决方案1】:

您可能将状态参数的无效指针传递给 wait(2)。

至于如何调试这种东西,我的第一步是为你的 C 库安装调试符号。然后查看它在哪个指针上出错并在堆栈中跟踪它(如果可能的话)。

【讨论】:

    【解决方案2】:

    查看您调用 wait() 时使用的参数,并查找内存覆盖问题。通过Valgrind 运行您的程序,以帮助您轻松检测许多覆盖。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      • 2015-08-10
      • 2014-09-10
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      相关资源
      最近更新 更多