0

好的,所以我一直在stackoverflow上寻找这个,并且肯定在谷歌上搜索了半个小时,但我得到的答案似乎与我真正想做的事情几乎没有任何关系,希望有人能帮助我一,代码如下:

int cCount = 0;

while(cCount < 2)
{
    switch(fork())
    {
    case 0:
    cCount++;
    break;

    case -1:
    printf("Failed");
    break;

    default:
    break;
    }
}

return;

现在对于出现的问题,此代码假设创建一个具有 3 个级别(0、1、2)的树,

0 是它开始分叉的主要父代

1 是 0 中父母的 2 个孩子

2 是 1 中 2 位父母的 4 个孩子

创建对称树。基本上虽然我有几个问题:

  1. Switch 在每个循环上都执行 fork,所以理论上如果 fork > 0,它仍然会被 fork 为父级创建一个子子级,并且循环将继续进行,因此它可能会以父-父-父-父链结束,而不是每个父母 2 个孩子,然后 2 个孩子 4 个,等等。fork 怎么知道该怎么做?

  2. 假设我想做一棵树,在最后一层(级别)附加一个孩子,例如,我将如何开始?

我正确理解 fork 吗?如果不是,请解释一下,网上有很多教程,但它们似乎都比它可能的复杂得多。

干杯,谢谢 对我好一点,英语不是我的母语。

4

1 回答 1

0

这段代码基本上会分叉炸弹,原因如下:

当进程到达 firstfork时,它将为子进程返回 0,为父进程返回一个正数(子进程的 PID)。因此,父级的实例cCount永远不会增加,因此循环将永远运行。

于 2013-06-27T21:09:11.470 回答