美文网首页程序员计算机微刊
fork在for循环中的相关问题

fork在for循环中的相关问题

作者: 30fd099ab263 | 来源:发表于2017-09-15 03:05 被阅读205次
    • 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个+

    相关文章

      网友评论

        本文标题:fork在for循环中的相关问题

        本文链接:https://www.haomeiwen.com/subject/wbnjsxtx.html