Сигнал 11 segfault при системном вызове wait ()? - PullRequest
0 голосов
/ 07 декабря 2009

Я работаю над базовой оболочкой на 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? Как мне отладить подобные вещи?

Ответы [ 2 ]

1 голос
/ 07 декабря 2009

Возможно, вы передаете недопустимый указатель для аргумента состояния для ожидания (2).

Что касается того, как отлаживать подобные вещи, моим первым шагом будет установка символов отладки для вашей библиотеки C. Затем посмотрите, по какому указателю происходит сбой, и отследите его в стеке (если это возможно).

1 голос
/ 07 декабря 2009

Посмотрите на аргументы, которые вы вызываете с помощью wait (), а также найдите проблемы с перезаписью памяти. Запустите вашу программу через Valgrind , чтобы получить помощь в обнаружении многих перезаписей очень легко.

...