[英]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.