我正在尝试在我的迷你shell中实现fg
命令。
问题如下:
WIFSTOPPED(status)
的返回值:while(1){
pid_t pid_check = waitpid(pid,&signal,WNOHANG|WUNTRACED);
if(pid_check == pid){
if(WIFSTOPPED(signal)){
tempid = pid_check;
break;
}
else if(WIFEXITED(signal))
break;
else if(WIFSIGNALED(signal))
break;
}
…
}
我希望在给出fg命令时恢复:
kill(tempid,SIGCONT);
while(1){
pid_t pid_check = waitpid(pid,&signal,WNOHANG|WUNTRACED);
if(pid_check == pid){
if(WIFSTOPPED(signal)){
tempid = pid_check;
printf("Here");
break;
}
else if(WIFEXITED(signal))
break;
else if(WIFSIGNALED(signal))
break;
}
}
但WIFSTOPPED保持非零返回,因此waitpid正在中断并且进程在后台进行。我试图在网上搜索但找不到任何有用的东西。
答案 0 :(得分:1)
我注意到的一件事是您将继续信号发送到tempid
,然后监控pid
。
检查以确保它们设置为相同的PID,尽管它可能更安全,更易读:
kill(pid,SIGCONT);
进入监控循环之前。
您可能还需要考虑重命名signal
变量,以避免与signal()
函数发生冲突。