2014-01-13 34 views

回答

3

一般对于nforks以这种方式将要执行的下一个语句(在这种情况下printf2^n次。 这里是:

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

叉子像二叉树一样工作。所以它每次x次fork调用总是有2^x个进程。

让我们来看看你的例子。

首先fork()调用:

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

二fork()调用:

在这一点上,我们有两个过程(主进程和新创建的进程)。这些两个线程将单独调用第二叉,每个创建2个新进程。所以我们有4个线程。

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

enter image description here

+1

-1。从[this]中解除(http://stackoverflow.com/a/8768918/2235132)没有归属地的答案。 – devnull

+1

先生,我没有。我知道它像二叉树一样工作,我根据OP的问题提供了一个独特的解释。该图像是谷歌图像搜索“叉二叉树”FYI的第一个结果。请不要以这种突然的方式投票。 – Sorter

+0

够公平的; downvote逆转。 – devnull

相关问题