大家好我是用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编码什么样的信号?< / p>
我使用SIG_IGN
让此shell的主要进程忽略ctrl-c
和ctrl-z
的{{1}}和SIGINT
信号。
答案 0 :(得分:0)
你需要为主进程创建一个signal_handler,它可以接受ctrl-c
和ctrl-z
信号,然后将信号传递给子进程。
这意味着主进程和子进程的信号处理程序应该是不同的。