Игнорировать Ctr + c в программе для родительского pid - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь создать свою собственную оболочку и пытаюсь получить Ctrl + c, чтобы она закрывала дочерние процессы, но не отца (my_shell).

Это мой код разветвления:

 jobs_list[0].pid = fork();
                if (jobs_list[0].pid == 0) {
                        // Child process
                        if (execvp(argumentos[0], argumentos) == -1) {
                                perror("lsh");
                        }
                        exit(EXIT_FAILURE);
                } else if (jobs_list[0].pid < 0) {
                        // Error forking
                        perror("lsh");
                } else {
                        while(jobs_list[0].pid  != 0){
                        pause();
                        }
                }

Так что мой родитель ждет ребенка, когда я нажимаю Ctrl + C на бегущем ребенке, он убивает его правильно, но я хочу игнорировать, когда бежит только мой отец.Мой обработчик сигналов для ctrl + c:

void ctrlc(int signum) {
            printf("I am the process with PID %d , and the kid process is  %d \n",pid,jobs_list[0].pid);
            if(jobs_list[0].pid > 0){ //when 0 means there is a child
                    printf("I KILL THE PROCESS %d \n",jobs_list[0].pid);
                    kill(jobs_list[0].pid,SIGINT);
                    signal(SIGINT, ctrlc);

            }else{
                    signal(SIGINT, ctrlc);

            }
    }

Когда у меня спит ребенок и кликает Ctrl + c:

gnadal: ~~>sleep 40
Parse_args()--> token 0: sleep
Parse_args()--> token 1: 40

I am the process with PID 7987 , and the kid process is  7988 
I KILL THE PROCESS 7988

Но когда я простаиваю, я просто выхожу изСама программаПочему моя оболочка останавливается, когда я нажимаю Ctrl + c в родительской программе?

Спасибо за любую помощь.

...