【问题标题】:why does fork program printf execute more time [duplicate]为什么fork程序printf执行更多时间[重复]
【发布时间】:2014-01-13 09:38:17
【问题描述】:

man page of fork 我读到 fork 创建父进程的副本。但无法理解为什么下面的程序 printf 执行 8 次。我还阅读了Working of fork() in linux 链接。

#include <stdio.h>
int main()
{
    fork();
    fork();
    fork();
    printf("process\n");
}

【问题讨论】:

  • 因为2*2*2 == 8.
  • 我想你忘记了(一些)孩子们自己要 fork()。

标签: c linux process fork


【解决方案1】:

一般来说nforks以这种方式会执行下一条语句(在这种情况下是printf2^n次。 方法如下:

|
+-fork()----------------------------------+
|                                         |
+-fork()-------------+                    +-fork()-------------+
|                    |                    |                    |
+-fork()---+         +-fork()---+         +-fork()---+         +-fork()---+
|          |         |          |         |          |         |          |
print()    print()   print()    print()   print()    print()   print()    print()

【讨论】:

    【解决方案2】:

    Fork 像二叉树一样工作。因此,每 x 次 fork 调用总是有 2^x 个进程。

    让我们用你的例子来理解。

    第一次 fork() 调用:

    当第一个 fork() 被调用时。父进程创建一个新进程。所以我们有 2 线程。

    第二次 fork() 调用:

    此时我们有两个进程(主进程和一个新创建的进程)。这两个线程将分别调用第二个 fork,并分别创建 2 个新进程。所以我们有 4 个线程。

    你现在可能已经明白了。每次遇到 fork() 时,所有进程都会创建它们各自的子进程(自己加倍)。

    【讨论】:

    • -1。摘自 this 答案,未注明出处。
    • 先生,我没有。我知道它像二叉树一样工作,我根据 OP 的问题提供了一个独特的解释。该图像是谷歌图像搜索fork binary treeFYI 的第一个结果。请不要以这种突然的方式投反对票。
    • 还不错;投反对票。
    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2012-07-01
    • 2012-06-11
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多