我正在尝试制作自己的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时我的外壳会停止?
感谢您的帮助。