• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于fork函数

宫梓萱 2019-04-30 浏览量:614

关于fork不是太懂。有个例程想大家帮我分析下

int main(void)

{

  fork();

  fork();

  fork();

  printf(" test  \n");

 return 0;
}


结果时test 打印了八次,但是我不晓得为什么就打印了八次,你们帮我分析下,最好详细点,我刚开始学,不太懂

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • fork会产生一个新的进程,然后这个进程执行与父进程一样的后续动作

    你这里,父进程A,在第一个fork之后,产生子进程A1,于是有两个进程A与A1

    第二个fork,父进程A与子进程A1都会执行,产生两个子进程,分别为A2与A11于是有四个进程,为A A1 A2 A11

    第三个fork,所有进程又产生了一个子进程,于是A A1 A2 A11 产生A3 A12 A21 A111

    总共八个进程执行printf,当然就是八次

    • 发布于 2019-05-02
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:4
  • 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
     一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。
    • 发布于2019-04-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 第一个fork生成两个进程,每个进程中从第二个fork开始执行,执行时再次生成2倍数进程。依次类推,你调用3次, 2^3=8个进程。所以看到打印8次。
    • 发布于2019-04-30
    • 举报
    • 评论 0
    • 0
    • 0

  • int main(void)

    {                                         // 现在是一个进程

      fork();                               // fork 一次后,生成一个新进程,共2个进程

      fork();                              // fork 后,每个进程又生成一个新进程,原 2 个进程变成 4 个

      fork();                              // fork 后,每个进程又生成一个新进程,原 4 个进程变成 8 个

      printf(" test  \n");               // 共 8 个进程,都执行  printf  命令,当然会执行 8 次。

     return 0;
    }


    建议把 printf(" test  \n");  换成  printf(" test %d \n" getpid());, 就能看到每个输出都是不同的进程输出的。

    • 发布于2019-05-01
    • 举报
    • 评论 0
    • 0
    • 0

  • fork以后会生成父进程和子进程,下面的代码是父进程和子进程同时运行的。参考上面老哥的回答。
    • 发布于2019-05-07
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于fork函数