簡體   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