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