【问题标题】:How this fork() code create five processes? [duplicate]这个 fork() 代码如何创建五个进程? [复制]
【发布时间】:2014-03-23 09:34:42
【问题描述】:
 main()
    {
        fork() && fork() || fork();

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

//怎么打印5次而不是8次?

【问题讨论】:

标签: c unix operating-system


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    因为短路。

    如果我重写这个:

    main()
    {
        // fork() && fork() || fork();
    
        if (fork()) {
            if (!fork()) {
                fork();
            }
        } else {
            fork();
        }
    
        printf("forked\n");
        return 0;
    }
    

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

      f
    /   \
    f   f
    |
    f
    

    【讨论】:

      猜你喜欢
      • 2020-09-12
      • 1970-01-01
      • 2014-02-03
      • 2021-06-11
      • 1970-01-01
      • 2013-10-07
      • 2014-07-20
      • 1970-01-01
      • 2012-06-10
      相关资源
      最近更新 更多