首页 > 解决方案 > 在我的自定义 shell 中使用 & 功能后 ctrl-c 不起作用

问题描述

我正在尝试在我正在构建的自定义 shell 中编写背景功能。(例如 & 选项,如:echo hello &)

当我生成前台进程时一切正常,但是在生成后台进程后,当按下 ctrl-c 时,我的 shell 程序不会终止。

这是我的代码中负责将新进程作为后台/前台运行的部分:

struct cmd* c=parsecmd(buf);
pid_t pid;
signal(SIGTTOU,SIG_IGN);
if((pid=fork1()) == 0){
  pid=getpid();
  setpgid(pid,pid);
  if((c->type & 0x100)==0)//if forground
    tcsetpgrp(0,pid);
  signal(SIGTTOU,SIG_DFL);
  runcmd(c);
}
setpgid(pid,pid);
if((c->type & 0x100)==0){
    tcsetpgrp(0,pid);
    wait(&r);
    tcsetpgrp(0,getpgid(getpid()));
}
//printf("my pgid is %d and the forground pgid is %d\n",getpgid(getpid()),$
signal(SIGTTOU,SIG_DFL);

这是我运行它时得到的结果:

6.828$ echo hello &
6.828$ hello

6.828$ ^C
6.828$ 

有人可以帮我弄清楚我的错误是什么吗?

另外我应该说,当我在生成后台进程后立即使用 ctrl-c 时。不起作用的事情是当我输入 enter 并编写 ctrl-c 然后即使我将继续生成其他命令(前景或背景)它也不会起作用。当我在生成前景后输入 enter 时它工作得很好。过程(和

标签: clinuxshell

解决方案


推荐阅读