首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从视觉上看,For循环中的fork()会发生什么?

从视觉上看,For循环中的fork()会发生什么?

提问于 2018-05-16 10:06:05
回答 2关注 0查看 223

我一直在试图理解fork()行为。这一次在一个for-loop。请注意以下代码:

代码语言:javascript
复制
#include <stdio.h>

void main()
{
   int i;

   for (i=0;i<3;i++)
   {
      fork();

      // This printf statement is for debugging purposes
      // getppid(): gets the parent process-id
      // getpid(): get child process-id

      printf("[%d] [%d] i=%d\n", getppid(), getpid(), i);
   }

   printf("[%d] [%d] hi\n", getppid(), getpid());
}

这是输出:

代码语言:javascript
复制
[6909][6936] i=0
[6909][6936] i=1
[6936][6938] i=1
[6909][6936] i=2
[6909][6936] hi
[6936][6938] i=2
[6936][6938] hi
[6938][6940] i=2
[6938][6940] hi
[1][6937] i=0
[1][6939] i=2
[1][6939] hi
[1][6937] i=1
[6937][6941] i=1
[1][6937] i=2
[1][6937] hi
[6937][6941] i=2
[6937][6941] hi
[6937][6942] i=2
[6937][6942] hi
[1][6943] i=2
[1][6943] hi

我画了下图:

在这里输入图像描述
在这里输入图像描述

观察:

  1. 父进程(main)必须迭代循环3次。然后printf被调用。
  2. 在父for循环的每次迭代中调用fork()。
  3. 每次fork()调用后,i都会递增,所以每个孩子在递增前从i开始一个for-loop。
  4. 在每个for循环结束时,打印“hi”。

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档