Мой проект состоит в том, чтобы реализовать простую программу оболочки с фоновой обработкой, заканчивая arglist символом &, как в большинстве оболочек UNIX.Моя проблема заключается в том, как отлаживать оболочку в GDB, когда фоновая обработка требует создания дочерних процессов.
Мой дочерний код обработки выглядит так:
int id;
int child=-1;
int running=0;
if ((strcmp(args[0], "&")==0){
if ((id==fork())==-1)
perror("Couldn't start the background process");
else if (id==0){ //start the child process
running++;
printf("Job %d started, PID: %d\n", running, getpid());
signal(SIGINT, SIG_DFL);
signal(SIGQUIT, SIG_DFL);
execvp(args[0], args);
perror("Can't execute command);
exit(1);
else {
int jobNum= running-(running-1);
if ( (waitpid(-1, &child, WNOHANG) == -1)
perror("Child Wait");
else
printf("[%d] exited with status %d\n", jobNum, child>>8);
}
Когда я пытаюсь выполнить команду, напримерps &, и установите точку останова для синтаксического анализатора функции, команда выполняется без попадания в точку останова.Это сбивает с толку и делает отладчик бесполезным в этом случае.Что я могу с этим поделать?