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

标签 c fork system-calls

这是我的代码。请看一看。您能解释一下工艺流程吗?这实际上是一个过去的纸质问题。但是,坦率地说,我不理解 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 的当前值。

关于c - fork() 示例程序。需要解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31102707/

相关文章:

c - 我遇到左值错误

c - 在 openssl 包中找不到 FIPS_mode_set() 代码

c - 将对象数组传递给 Objective C 中的函数——并返回一个对象

c - 通过CGO传递结构

c - 2种结构声明的区别

C: fork() - 子级和父级未按预期行事

c - 如何正确使用execl?

c - 在 fork 卡在未知位置的读取循环中后从子管道读取

c - 为什么 Android 2.6.29 中的 syscalls.h 文件中不存在 sys_mmap?

c - shell脚本中的后台进程收到EOF