使用c程序在unix中使用fork()系统调用

时间:2011-05-24 11:38:42

标签: c unix

嘿,我想知道以下代码的输出: -

main()
{
fork();
fork();
fork();
printf("hello world");
}

我认为应该打印4次hello world。 Plz帮助我。

3 个答案:

答案 0 :(得分:4)

它将打印8次(2 ^ 3):每个fork生成一个额外的进程 - 所以你在每一步(父和子)最终得到2个进程,并且每个进程在右步继续执行在叉子之后。 所以第一叉 - > 2个进程中的每一个进入第二个fork,你在其中生成2个额外的进程,所以你现在有4个进程,每个进入第3个fork,每个进程生成一个额外的进程 - 所以有8个进程进入printf的行!

答案 1 :(得分:2)

每个分叉都会创建一个新的孩子。每个孩子都有与父母相同的代码。所以孩子们也会分叉。

所以父母有3个孩子。 Child1有2个孩子。 Child2有1个孩子。 Child11有一个孩子。

总计8个流程。 8 printf

答案 2 :(得分:0)

它将打印2 ^ 3 = 8次。请记住,每次调用fork时,您都在创建一个子进程,该子进程将在分叉后立即继续执行,因此它本身也可以进行分叉。树看起来像这样。

                  First process.

  Forked1               Forked2       Forked3

Forked4 --- Forked5 -------------- Forked6

Forked7

因此我们将总共运行8个进程(主进程和7个分叉进程)并打印print语句。 作为旁注:如果print语句在fork之前,它将不会被新分叉的进程执行。