我正在尝试为类项目实现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来停止它,它会返回一个错误,说明没有子进程可用,但也返回退出。我查询状态错了吗?此外,这应该是在不使用信号的情况下实现的,所以我不能走那条路。
谢谢!