繁体   English   中英

将作业放入前景外壳实现的c

[英]putting job into foreground shell implemented c

我正在尝试制作自己的Linux Shell。 我已经修复了bg命令,它正在使用以下代码:

if (strcmp(worte[0], "bg")==0){
      pid_t pidnumber;
      pidnumber=atoi(worte[1]);
      printf("PID: %d", pidnumber);
      kill(pidnumber, SIGCONT);
      return 0;
    } 

但是,fg命令无法正常工作。 当我键入“ fg 12345”(12345是进程ID)时,它将把该进程置于前台,但是我无法使用Ctrl-Z停止它,也不能使用Ctrl-C。 我的代码如下

if (strcmp(worte[0], "fg")==0){
      pid_t pidnumber;
      pidnumber=atoi(worte[1]);
      tcsetpgrp(0, getpgid(pidnumber));
      waitpid(getpgid(pidnumber), NULL, WUNTRACED);
      tcsetpgrp(0, getpgid(shellpid));

      return 0;
    }

在代码中,worte [0]表示fg,worte 1表示进程ID(例如:12345)。 我如何解决我的问题,感谢您的帮助。 请看图片看看我的问题明显

尝试忽略SIGTTOU。

pid_t pidnumber;
pidnumber=atoi(worte[1]);
signal(SIGTTOU, SIG_IGN);
tcsetpgrp(0, getpgid(pidnumber));
signal(SIGTTOU, SIG_DFL);
waitpid(getpgid(pidnumber), NULL, WUNTRACED);
signal(SIGTTOU, SIG_IGN);
tcsetpgrp(0, getpgid(shellpid));
signal(SIGTTOU, SIG_DFL);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM