大家好,我正在使用C++实现linux的shell,但是信号有些问题。
这是我的shell的基本逻辑,它是伪代码,但是您可以轻松知道我想做什么。
signal_handler(int sig){
switch(sig){
case SIGINT: ... break;
case SIGTSTP: ... break;
}
}
main{
signal(SIGINT,SIG_IGN);
signal(SIGTSTP, SIG_IGN);
what main process do{
wait(&child_pid);
}
what child process do{
signal(SIGINT, signal_handler);
signal(SIGTSTP, signal_handler);
}
}
现在,我正在使用
wait(&fpid)
来等待子进程的终止。。但是现在,我想使用作业控制功能。.应该为waitpid编码哪种信号?我使用
SIG_IGN
让此shell的主进程忽略ctrl-c
和ctrl-z
信号SIGINT
和SIGTSTP
。 最佳答案
您需要为主进程创建一个signal_handler,它可以接受ctrl-c
和ctrl-z
信号,然后将该信号传递给子进程。
这意味着主进程和子进程的信号处理程序应该不同。