在Unix shell中查询子进程的状态

时间:2012-10-07 18:52:20

标签: c unix

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

谢谢!

0 个答案:

没有答案