Я работаю над базовой оболочкой на C. В моей реализации pipe я считаю команды в строке и итеративно 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()
вызовет segfault? Как мне отладить подобные вещи?