程序员计算机微刊

fork在for循环中的相关问题

2017-09-15  本文已影响205人  30fd099ab263
#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个+

上一篇 下一篇

猜你喜欢

热点阅读