Привет Я работаю над некоторыми упражнениями из Advanced Programming Unix System. Меня интересует, как работают и execlp Функциональные работы. Из текста автор указывает, что fork создает новый процесс. Он вызывается один раз - родителем, но возвращается дважды - в родительском и дочернем.Отладка неполноценного процесса
Так вилка возвращает неотрицательное PID к родителю и от 0 до ребенка. Я хотел бы пройти эту последовательность вызовов с помощью GDB, однако мои точки прерывания заставляют ребенка не запускать или прерывать системные вызовы, которые заставляют родителя прекращать работу.
1 - если я установил точку останова - else if (pid == 0) -> процесс не запускается.
2 - если я установил точку останова - execlp (buf, buf, (char *) 0);
Я, получаю следующее сообщение об ошибке:
waitpid ошибка: Прерванный системный вызов [Низший 1 (процесс 461) завершался с кодом 01]
Какие у меня есть варианты, чтобы установить в GDB для отладки родительского и дочернего? Где установить точки останова?
int main(int argc, char *argv[])
{
char buf[MAXLINE];
pid_t pid;
int status;
printf("%% ");
while(fgets(buf, MAXLINE, stdin) != NULL)
{
if(buf[strlen(buf) - 1] == '\n')
buf[strlen(buf) - 1] = 0;
if((pid = fork()) < 0)
{
err_sys("fork error");
}
else if(pid == 0)
{
execlp(buf, buf, (char *)0);
err_ret("could'nt execute: %s", buf);
exit(127);
}
if((pid = waitpid(pid, &status, 0)) < 0)
err_sys("waitpid error");
printf("%% ");
}
exit(0);
}
Благодаря OznOg ... ваше предложение отлично работает на моем Linux VM, однако он не работает, когда Я в среде OS X. Из документации я вижу следующее: «В большинстве систем gdb не имеет специальной поддержки для отладки программ, которые создают дополнительные процессы с использованием функции fork. Когда программа forks, gdb будет продолжать отлаживать родительский процесс, а дочерний процесс будет работать беспрепятственно Если вы установили точку останова в любом коде, который затем выполняет дочерний элемент, дочерний элемент получит сигнал SIGTRAP, который (если он не поймает сигнал) приведет к его завершению ». – dcrearer
Добро пожаловать, грустно видеть, что он не работает на osX. – OznOg