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

 时间:2024-11-04 02:48:06

概述

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

1.函数本身

(1)头文件

#include

#include

(2)函数原型

pid_t fork( void);

(pid_t 是一个宏定义,其实质是int 被定义在#include中)

返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1

(3)函数说明

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

2.代码执行解释

(1)代码如下图所示

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

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

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

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

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

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

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

  • Win10怎么取消开机自检
  • 如何恢复Adobe Reader为默认打开PDF格式的工具
  • 360驱动大师如何还原驱动?
  • WPS Office怎么设置关闭自动升级
  • 怎样使用windows语音助手
  • 热门搜索
    香港迪士尼旅游攻略 陕西旅游集团 安徽省旅游局 上海旅游景点大全 枣庄旅游景点 北京旅游住宿 呼伦贝尔旅游包车 阜阳旅游 孝感旅游 房山旅游景点大全