int x=0;
int main()
{
for(i=0;i<2;i++)
{
fork();
x=x+5;
}
return 0;
}
我是 fork()
概念的新手。上面的树(具有 x
值)是否是上述 C 代码的正确解决方案?节点中的值分别是其进程的x
值。
我们还可以从子进程返回值给父进程吗?假设在上面的示例代码中,我可以将子进程的x
值返回给父进程吗?
最佳答案
你的意思是那是一个进程树并且在气泡中是 x
的值?那么不,那是不正确的。
当一个 child 被生成时,它会得到父代的精确副本......所以让我们“打印”一些值,以便我们可以看到事物的状态(我正在为所有东西制作 PID)
当我们开始时,它只是父级:
parent (11174) x = 0, i = 0
然后我们点击fork()
,现在我们有两个进程:
+--parent (11174) x = 0, i = 0
|
+->child1 (11175) x = 0, i = 0
接下来是数学:
parent (11174) x = 5, i = 0
child1 (11175) x = 5, i = 0
当我们向上循环时,我们的 i 将递增,现在每个进程都运行循环并点击 fork()
:
+--parent (11174) x = 5, i = 1
|
+->child2 (11176) x = 5, i = 1
+--child1 (11175) x = 5, i = 1
|
+->child (11177) x = 5, i = 1
现在大家又开始做数学题了:
parent (11174) x = 10, i = 1
child2 (11176) x = 10, i = 1
child1 (11175) x = 10, i = 1
child (11177) x = 10, i = 1
最后,每个人都进入了循环并增加了 i
来打破它。所以你的最终结果是:
parent (10)----->child1(10)---->child(10)
|
+----->child2(10)
关于c - 如何在 c 中解决这个 fork() 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13612333/