fork在for循环中的相关问题

  • What will produce on your display this program. Why?
#include <stdio.h> 
int i;
int main() {
  for(i=0;i<2;i++){
    if(fork())
      fork();
  }
  printf ("%d\n", i);
  system ("echo i++");
}

以上这段代码产生了9个进程

第一个fork循环两次会产生3个父进程和3个子进程

每个父进程会执行第二次fork产生一个父进程和一个子进程,一共3*2=6个父子进程

加上之前fork的3个子进程一共是9个进程

#include <stdio.h> 
int i;
int main() {
  for(i=0;i<2;i++){
    fork();
      fork();
  }
  printf ("%d\n", i);
  system ("echo i++");
}

以上这段代码产生了16个进程,

1x2(第一次fork)x2(第二次fork)|(第一次循环结束)|

x2(第一次fork)x2(第二次fork) |第二次循环结束|

一个循环n次的fork会结束时会有2^n个的进程(包含主进程)

循环内每多一个fork会多产生2^n倍进程


  • 例如
for(int i=0;i<3;i++)
{
  fork();
  }
 system("echo +")

这段代码会显示8(2^3)个+
如果改成这样

for(int i=0;i<3;i++)
{
  fork();
  fork();
  }
 system("echo +")

则会显示8*8=64个+

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容