【问题标题】:Process creation tree for this code?此代码的进程创建树?
【发布时间】:2012-09-26 15:15:05
【问题描述】:

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

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

这是我尝试过的:

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

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

【问题讨论】:

    标签: process posix fork


    【解决方案1】:

    第一行:

    if (fork())
    

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

        fork();
    

    父级再次分叉。现在有三个进程,三个进程都会运行剩下的代码。

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

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

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

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

    我不会尝试 ASCII 艺术,但生成的树看起来有点像某个熟悉的银器......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      相关资源
      最近更新 更多