gpt4 book ai didi

c - 当您在 for 循环中使用 fork() 时,进程如何分支?

转载 作者:行者123 更新时间:2023-11-30 20:07:33 24 4
gpt4 key购买 nike

循环外的

fork() 调用很容易弄清楚,但当它们位于循环内时,我发现很难。谁能用这样的例子形象地解释流程如何分支?

#include <stdio.h>

int main(){
int i;
for(i=0;i<2;i++)
{
fork();
printf("hi");
fork();
}
exit(0);
}

最佳答案

理想情况下,情况是这样的:

  • 每个进程(缩写为proc)都会打印一个“hi”
  • 每个 fork 都会使进程数量加倍(每个进程生成一个子进程)

可以通过跟踪每个事件来完成计算:

  • 启动:1 个进程
  • fork :2 x 1 = 2 个进程
  • 打印:2 procs -> 2 hi's
  • fork :2 x 2 = 4 个进程
  • fork :2 x 4 = 8 个进程
  • 打印:8 个进程 -> 8 hi's
  • fork :2 x 8 个进程 -> 16 个进程

现在我们将 hi 的数量加起来:

2 + 8 = 总共 10 个嗨

但是,事实并非一定如此。在不同的系统上,您可能会得到不同的结果。

调用 fork() 会导致生成与父进程相同的子进程。如果在打印 stdout 时进行了任何缓冲,并且在下一个 fork 之前未刷新缓冲区,则子进程将在“不应该”时进行打印。引用this有关缓冲的一些详细信息的问题。

这会导致不同系统打印不同数量的 hi。

关于c - 当您在 for 循环中使用 fork() 时,进程如何分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11908060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com