0

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

谢谢!

4

0 回答 0