如何实现shell的作业控制

时间:2015-05-21 12:07:54

标签: c++ linux shell

大家好我是用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-cctrl-z的{​​{1}}和SIGINT信号。

1 个答案:

答案 0 :(得分:0)

你需要为主进程创建一个signal_handler,它可以接受ctrl-cctrl-z信号,然后将信号传递给子进程。

这意味着主进程和子进程的信号处理程序应该是不同的。