fork()和waitpid可能的输出

时间:2013-12-02 18:18:09

标签: c fork waitpid

我的教科书给出了以下主要程序:

int main()
{
if(fork() == 0)
    {
        printf("a");
    }
    else
    {
        printf("b");
        waitpid(-1, NULL, 0);
    }
    printf("c");
    exit(0);
}

它询问可能的输出是什么,我找到了3:

abcc:操作系统选择先执行子进程,然后输出“a”。然后,OS暂停子进程并恢复父进程,打印“b”。然后父母必须等到孩子完成,孩子打印“c”,最后父母打印“c”。

bacc:操作系统选择先运行父进程,然后输出“b”。然后父母必须等待孩子完成并打印“ac”。然后父母打印“c”。

acbc:操作系统选择孩子先运行直到完成,打印“ac”。然后父程序运行完成,打印“bc”。

但是,教科书中还有一个答案,bcac。我不明白这是怎么可能的,因为如果首先打印b,那么父母必须等待孩子继续,并打印“ac”,然后父母将打印“c”,给出我已经列出的bacc 。有什么我缺少的,或者说只有3种可能的输出是正确的吗?

1 个答案:

答案 0 :(得分:0)

不要总是信任教科书......

来自errata

  

页。 772,实践问题解决方案8.3。序列bcac不是   可能。罢工倒数第二句。最后一句应该   是“有三种可能的顺序:acbc,abcc和bacc。”请   请参阅Web Aside ECF:Web上的GRAPHS Aside页面上的示例   流程图。