2012-09-26 32 views
0

这段代码的流程创建树是什么(假设所有的分支都成功了)?此代码的进程创建树?

if(fork()) 
    fork(); 
n = 3; 
for(i=1;i<n;++i) 
{ 
    if(pid = fork()) 
     break; 
} 

这是我的尝试:

 [0] 
     | 
     /\ 
    [1] [1] 
     |  | 
    [2] [2] 
     |  | 
    [3] [3] 
     | 
    [4] 

但是,这甚至不是选择之一!任何帮助表示赞赏。

回答

0

第一行:

if (fork()) 

这个叉后,有两个过程,家长和孩子。在父类中,fork()返回非零值。在孩子中,fork()返回零。这意味着下一行将只在父项中运行。

fork(); 

父母再次分叉。现在有三个进程,三个进程将运行其余的代码。

for(i=1;i<n;++i) 
{ 
    if(pid = fork()) 
     break; 
} 

首先,i = 1。三个过程中的每一个创建一个孩子,看到一个非零的结果,并跳出循环。所以原来的三个过程都完成了。但孩子们会继续前进。

下一次通过循环,我= 2。同样的事情发生。三个孩子的每一个都会自己分出一个孩子,看到一个非零的结果,然后休息。三个新的孩子将继续前进。

等等直到i = n-1。

我会尽我所能在ASCII艺术,但由此产生的树看起来有点像一个熟悉的银器...

+0

非常感谢。 –