我正在使用 C 语言开发一个基本的 shell。在我的管道实现中,我计算了线上的命令并迭代地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()
导致段错误?我该如何调试这种事情?