0

クラス プロジェクトに Unix シェルを実装しようとしていますが、いくつかの問題が発生しています。つまりこの方法

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