为什么fork程序printf执行更多时间

时间:2014-01-13 09:38:18

标签: c linux process fork

来自man page of fork i read fork的

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

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

2 个答案:

答案 0 :(得分:3)

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

让我们了解你的例子。

第一个fork()调用:

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

第二次fork()调用:

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

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

enter image description here

答案 1 :(得分:3)

一般情况下,n forks以这种方式执行下一个语句(在本例中为printf2^n次。 方法如下:

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