0

3 つの子プロセスと 1 つの親プロセスがありますか? 2 つの異なる waitpid は何をしますか? なぜ 2 つあるのですか?

int main()
{
    pid_t pid;

    int status, counter = 4;
    while(counter > 0)
    {
        pid = fork();
        if(pid)
        {
            counter /= 2;
        }
        else
        {
            printf("%d", counter); /* (1) */
            break;
        }
    }
    if(pid)
    {
        waitpid(-1, &status, 0);
        counter += WEXITSTATUS(status);
        waitpid(-1, &status, 0);
        counter += WEXITSTATUS(status);
        printf(";%d", counter); /* (2) */
    }
    return counter;
}

waitpid の後の 2 番目の printf は、3、5、6、34、52、61 (セミコロンを除く) を出力します。2桁の印刷がどのように行われるのかわかりません。2 桁目は、おそらく while ループの printf から来ていることを知っています。

4

1 に答える 1