从man page of fork我读fork创建父进程的重复。但无法理解为什么下面的程序printf
执行次。我也读了Working of fork() in linux链接。为什么fork程序printf执行更多时间
#include <stdio.h>
int main()
{
fork();
fork();
fork();
printf("process\n");
}
从man page of fork我读fork创建父进程的重复。但无法理解为什么下面的程序printf
执行次。我也读了Working of fork() in linux链接。为什么fork程序printf执行更多时间
#include <stdio.h>
int main()
{
fork();
fork();
fork();
printf("process\n");
}
一般对于n
forks
以这种方式将要执行的下一个语句(在这种情况下printf
)2^n
次。 这里是:
|
+-fork()----------------------------------+
| |
+-fork()-------------+ +-fork()-------------+
| | | |
+-fork()---+ +-fork()---+ +-fork()---+ +-fork()---+
| | | | | | | |
print() print() print() print() print() print() print() print()
叉子像二叉树一样工作。所以它每次x次fork调用总是有2^x个进程。
让我们来看看你的例子。
首先fork()调用:
当第一fork()
被调用。父进程创建一个新进程。所以我们有2 线程。
二fork()调用:
在这一点上,我们有两个过程(主进程和新创建的进程)。这些两个线程将单独调用第二叉,每个创建2个新进程。所以我们有4个线程。
您现在可能已经明白了。每次遇到fork()时,所有进程都会创建它们各自的子进程(自身加倍)。
因为'2 * 2 * 2 == 8'。 – devnull
我想你忘记了(一些)孩子们自己要fork()。 – Bandrami