我正在尝试为一个类项目实现一个 Unix shell,我遇到了一些问题。即这种方法
void checkStatus()
{
printf("checking status\n");
job_t* checkStart = first_job;
while(checkStart != NULL)
{
process_t* processStart = checkStart->first_process;
while(processStart != NULL)
{
int status;
pid_t test = waitpid(processStart->pid, &status, WUNTRACED | WNOHANG);
printf("%d\n", processStart->pid);
printf("%s\n", strerror(errno));
printf("%d\n", status);
printf("%d\n", test);
if(WIFEXITED(status))
{
printf("exited\n");
}
if(WIFSTOPPED(status))
{
printf("stopped\n");
}
processStart = processStart->next;
}
checkStart = checkStart->next;
}
}
应该查询所有正在运行或已经运行的进程的状态,以便可以更新进程结构(我需要能够打印出每个进程的状态)。当我尝试通过运行前台进程并使用 ctrl+z 暂停它来测试它时,它总是以退出状态返回。此外,如果我使用 ctrl+c 停止它,它会返回一个错误,指出没有可用的子进程,但也返回退出。我查询状态是否错误?这也应该在不使用信号的情况下实现,所以我不能走那条路。
谢谢!