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