大家好,我正在使用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-cctrl-z信号SIGINTSIGTSTP

最佳答案

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

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

10-06 01:30