fork() 示例程序。需要解释

fork() example program. need explanation

这是我的代码。请看一看。你能解释一下流程吗?这实际上是一个过去的纸质问题。但是,老实说我不明白fork系统调用的概念。

main()
{
   int i = 1;
   int ret_val= 0;

   while(i <= 5)
   {
      fork();
      if(ret_val == 0) /*child code*/
      {
         printf("in child %d. \n", i);
         exit(0);
      }
      else
      {     /*parent code*/
         i = i+1;
      }
   }
}

首先,在程序的核心映像中,您初始化了两个值,ret_val 和用作计数器的 i

从那以后,您 fork() 程序 5 次,使用相同的图像(代码)创建另一个进程。此时我假设您的代码是错误的,因为您正在使用 ret_val 变量来检查它是子进程还是父进程,但是要这样做,您需要为其分配 fork() 中的值像这样:

ret_val = fork();

if (ret_val == 0)
   // do something as child
else
   // parent code here

本质上,您的代码将 i 的值递增 5 次,并让每个子进程显示 i 的当前值。