嘿,我想知道以下代码的输出: -
main()
{
fork();
fork();
fork();
printf("hello world");
}
我认为应该打印4次hello world。 Plz帮助我。
答案 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之前,它将不会被新分叉的进程执行。