这个fork()代码如何创建五个进程?

时间:2014-02-21 17:56:30

标签: c unix operating-system

 main()
    {
        fork() && fork() || fork();

        printf("forked\n");
        return 0;
    }

//如何打印叉子5次而不是8次?

2 个答案:

答案 0 :(得分:4)

由于短路。

如果我改写这个:

main()
{
    // fork() && fork() || fork();

    if (fork()) {
        if (!fork()) {
            fork();
        }
    } else {
        fork();
    }

    printf("forked\n");
    return 0;
}

在第一个fork之后,您将有一个进程立即进入else分支,并且将继续进行。进入else循环的那个将只分叉一次(右分支)。进入内部的那个将分叉一次,它的孩子将再次分叉。

  f
/   \
f   f
|
f

答案 1 :(得分:1)

因为和操作员。请记住,操作员一旦遇到错误就会终止。 fork将为父级或子级返回0(false)(忘记),它将终止跳过其他2个for的布尔表达式,这就是为什么你只打印fork 5次而不是8次