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

概述

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

1.函数本身

(1)头文件

#include

#include

(2)函数原型

pid_t fork( void);

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

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

(3)函数说明

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

2.代码执行解释

(1)代码如下图所示

(2)分析

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

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

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

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

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

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

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

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

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

  

爱华网本文地址 » http://www.413yy.cn/a/8104320103/241634.html

更多阅读

如何学习C语言编程

如何学习C语言编程——简介6 部分:准备工作 变量的使用 使用条件语句 学习循环语句 使用函数 不断学习诞生于上世纪70年代的C语言是一门古老的语言了, 但作为一门底层语言,时至今日它仍然非常强大。学习C语言能够为学习其他更复杂

C语言函数大全 学习c语言编程

C语言函数大全函数名: abort功 能: 异常终止一个进程用 法: void abort(void);程序例:#include <stdio.h>#include <stdlib.h>int main(void){printf("Calling abort()")

PIC单片机C语言编程教程(1) pic单片机c语言教程

PIC 单片机 C 语言编程简介用 C语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高、便于跨平台的代码移植等等,因此C 语言编程在单片机系统设计中已得到越来越广泛的运用。针

十种可能改变IT行业走向的编程语言 编程语言

时间:2012-01-05 10:18 来源:互联网 字体:[大 中 小]我们真的还需要那么多新型编程语言吗?当前开发人员们所拥有的选择无疑已经相当丰富。命令型语言、函数型语言、面向对象型语言、动态语言、编译语言解释型语言以及脚本语言等等似

声明:《c语言fork函数 C语言编程创建函数fork() 执行解析》为网友臨莂勿分享!如侵犯到您的合法权益请联系我们删除