此代码的进程创建树是什么(假设所有分支都成功)?
if(fork())
fork();
n = 3;
for(i=1;i<n;++i)
{
if(pid = fork())
break;
}
这就是我的尝试:
[0]
|
/\
[1] [1]
| |
[2] [2]
| |
[3] [3]
|
[4]
但这甚至不是其中一个选择!任何帮助表示赞赏。
答案 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艺术的尝试,但最终的树看起来有点像某件熟悉的银器......