在wait()系统调用上发出信号11段错误?

时间:2009-12-07 15:37:26

标签: segmentation-fault fork wait signals

我正在研究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()导致段错误的情况下?我该如何调试这类事情?

2 个答案:

答案 0 :(得分:1)

查看你正在调用wait()的参数,并查找内存覆盖问题。通过Valgrind运行您的程序,以获得非常容易检测到许多覆盖的帮助。

答案 1 :(得分:1)

您可能正在将status参数的无效指针传递给wait(2)。

至于如何调试此类事情,我的第一步是安装C库的调试符号。然后查看哪个指针发生错误并将其追溯到堆栈(如果可能)。