gpt4 book ai didi

c - WIFSTOPPED 无法正常工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:00 31 4
gpt4 key购买 nike

我正在尝试在我的迷你 shell 中执行 fg 命令。问题如下:

  • 进程 (gedit) 在前台启动。
  • 我使用 ctrl+z 停止并通过检查 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 中断并且进程进入后台。我试图在线搜索,但找不到任何有用的东西。

最佳答案

我注意到的一件事是您将继续信号发送到 tempid,然后监控 pid

检查以确保将它们设置为相同的 PID,尽管仅使用它可能更安全且更具可读性:

kill(pid,SIGCONT);

在进入监控循环之前。

您可能还需要考虑重命名您的 signal 变量以避免与 signal() 函数发生冲突。

关于c - WIFSTOPPED 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32600269/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com