【发布时间】: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