忽略父pid程序上的Ctr + c

时间:2018-12-10 15:56:34

标签: c kill sigint

我正在尝试制作自己的shell,并且试图获取Ctrl + c,以便它关闭子进程,但不关闭父进程(my_shell)。

这是我的分叉代码:

addEventListener

因此,我的父母等待孩子,当我在奔跑的孩子身上碰到ctrl + c时,它可以正确杀死它,但是我想忽略何时我的父亲独自奔跑。 我的ctrl + c信号处理程序是:

 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时:

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时我的外壳会停止?

感谢您的帮助。

0 个答案:

没有答案