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

一个新故事

一个新故事

2016-02-19 10:33

今天图老师小编要向大家分享个Linux系统中C语言编程创建函数fork()执行解析教程,过程简单易学,相信聪明的你一定能轻松get!

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

1.函数本身

  (1)头文件

  #includeunistd.h
  #includesys/types.h

  (2)函数原型

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

  (3)函数说明

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

2.代码执行解释

  (1)代码如下图所示

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  (2)分析

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

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

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

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

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

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

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

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

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

C语言编程

编程语言 网络编程
C语言编程

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

C语言图形函数

编程语言 网络编程
C语言图形函数

编程修养-C语言篇

编程语言 网络编程
编程修养-C语言篇

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在C语言中以编程的方式获取函数名

编程语言 网络编程
在C语言中以编程的方式获取函数名

C语言库函数 (C类字母)

编程语言 网络编程
C语言库函数 (C类字母)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Java下3中XML解析 DOM方式、SAX方式和StAX方式

Java下3中XML解析 DOM方式、SAX方式和StAX方式

用CSS打造多彩文字链接

用CSS打造多彩文字链接
下拉加载更多内容 ↓