西西软件下载最安全的下载网站、值得信赖的软件下载站!

首页编程开发VC|VC++ → Linux系统中C语言编程创建函数fork() 执行解析

Linux系统中C语言编程创建函数fork() 执行解析

相关软件相关文章发表评论 来源:西西整理时间:2013/3/26 11:43:04字体大小:A-A+

作者:西西点击:0次评论:0次标签: 函数

  • 类型:编程辅助大小:15KB语言:中文 评分:5.0
  • 标签:
立即下载

最近在看进程间的通信,看到了fork()函数,虽然以前用过,这次经过思考加深了理解。现总结如下:

1.函数本身

  (1)头文件

  #include<unistd.h>
  #include<sys/types.h>

  (2)函数原型

  pid_t fork( void);
  (pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中)
  返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1

  (3)函数说明

  一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间,子进程有了独立的地址空间

2.代码执行解释

  (1)代码如下图所示

  (2)分析

  由操作系统相关知识可知,进程是系统资源分配的基本单位,因此子进程与父进程不共享进程资源空间。在执行代码段第8行之前,系统中只有默认的主进程。在执行完代码段第8行后,系统中就有了两个进程,即主进程和由其创建的子进程。

  创建子进程,fork()函数返回两个数值,若创建成功,子进程中返回0;父进程返回子进程ID。用资源空间图示如下:

执行了fork()函数后,主进程为父进程生成了一份资源空间的副本。主进程中的pid为子进程的pid(pid>0),子进程中的pid为0。

  在fork()函数之后父进程与子进程都从下一行执行,即第9行。因为主进程中pid>0,可以执行else if(pid>0)段代码,子进程pid=0,可以执行else if(pid==0)段代码。

  (3)代码执行结果如下:

  可见,"Before the fork ..."只执行了一次。"After the fork ..."执行了两次。

  (具体的执行结果,可能会由于进程调度的不同,后面的四个输出顺序可能不同。不过第一个输出的一定是"Before the fork ...")。

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)
    推荐文章

    没有数据

      没有数据
    最新文章
      没有数据