此代码的进程创建树?

时间:2012-09-26 15:15:05

标签: process posix fork

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

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

这就是我的尝试:

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

但这甚至不是其中一个选择!任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

第一行:

if (fork())

在这个fork之后,有两个进程,父进程和子进程。在父级中,fork()返回非零值。在子节点中,fork()返回零。这意味着下一行只能在父级中运行。

    fork();

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

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

首先,i = 1。三个进程中的每一个都创建一个子进程,看到一个非零结果,然后突破循环。所以最初的三个过程就完成了。但孩子们会继续前进。

下一次循环,i = 2。同样的事情发生了。三个子进程中的每一个都会分离出自己的子进程,看到非零结果,然后中断。三个新孩子将继续前进。

依此类推,直到i = n-1。

我将免除你对ASCII艺术的尝试,但最终的树看起来有点像某件熟悉的银器......