Linux多任务编程(二)---fork()函数及其基础实验
fork()函数
在 Linux 中创建一个新进程的唯一方法是使用fork()函数。fork()函数是 Linux 系统中一个非常重要的函数,和咱们以前遇到过的函数由一些区别,因为它看起来执行一次却返回两个值,这又作何解释?不着急,慢慢看。
函数说明
fork()函数用于从已存在的一个进程中创建一个新的进程,新进程称为子进程,而原进程称为父进程。使用fork()函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所独有的只有它的进程号、资源使用和计时器等。
因为子进程几乎是父进程的完全复制,所以父子进程会运行同一个程序。这就需要用一种方式来区分它们,并使它们照此运行,否则,这两个进程不可能做不同的事。
实际上是在父进程中执行fork()函数时,父进程会复制出一个子进程,而且父子进程的代码从fork()函数的返回开始分别在两个地址空间中同时运行,从而使两个进程分别获得其所属fork()函数的返回值,其中在父进程中的返回值是子进程的进程号,而在子进程中返回0。因此,可以通过返回值来判定该进程是父进程还是子进程。
同时可以看出,使用fork()函数的代价是很大的,它复制了父进程中的代码段、数据段和堆栈段里的大部分内容,使得 fork()函数的系统开销比较大,而且执行速度页不是很快。
函数语法
下表列出了 fork() 函数的语法要点
基础实验
如下为fork()函数的基础实验程序
程序代码我上传到资源,可以自己下载,点此下载
将它编写成C文件,然后输入命令:gcc fork.c -o fork
接着执行命令:./fork,就可以看到如下图的成功执行结果
当然,你也可以使用命令:arm-linux-gcc fork.c -o fork 交叉编译后下载到板子上运行也可。
转载于:https://www.cnblogs.com/snake-hand/archive/2013/06/08/3127402.html
Linux多任务编程(二)---fork()函数及其基础实验相关推荐
- 【Linux系统编程】fork()函数详解
00. 目录 文章目录 00. 目录 01. 进程创建函数 02. 父子进程结构 03. 父子进程地址空间 04. 附录 01. 进程创建函数 #include <sys/types.h> ...
- 【Linux系统编程】fork() 函数详解
需要的头文件: #include <sys/types.h> #include <unistd.h> pid_t fork(void); 功能: 用于从一个已存在的进程中创建一 ...
- Linux系统编程:fork函数的使用【循环创建N个子线程】
fork函数介绍 在linux下面进行系统编程,一定要养成一个好习惯,不懂的函数 直接 找男人,用man 指令进行查看,虽然是全英文 但是要强迫自己 学会看英文文档!下面是介绍,我们看重点. FORK ...
- Linux多任务编程之五:exit()和_exit()函数(转)
来源:CSDN 作者:王文松 转自:Linux公社 ----------------------------------------------------------------------- ...
- Linux多任务编程之七:Linux守护进程及其基础实验(转)
来源:CSDN 作者:王文松 转自Linux公社 ------------------------------------------------------------------------- ...
- linux网络编程二:基础socket, bind, listen, accept, connect
linux网络编程二:基础socket, bind, listen, accept, connect 1. 创建socket #include <sys/types.h> #inc ...
- Linux 串口编程二 深入了解 termios
前言 这一系列串口编程重点在应用层编程,但是在讲解原理与相关概念时需要对驱动框架有个基础的认识.如果只是浅尝辄止,以后在遇到串口驱动与应用层程序调试难免遇到瓶颈.关于 tty驱动架构参见我的其他博客: ...
- 【Linux系统编程】vfork() 函数详解
00. 目录 文章目录 00. 目录 01. vfork函数 02. fork和vfork区别 03. 父子进程地址空间 04. 附录 01. vfork函数 函数分析 #include <sy ...
- Linux网络编程之套接字基础
Linux网络编程之套接字基础 1.套接字的基本结构 struct sockaddr 这个结构用来存储套接字地址. 数据定义: struct sockaddr { unsigned short sa_ ...
最新文章
- 想学Python?快看看这个教程!收藏!
- 13个球一个天平,现知道只有一个和其它的重量不同,怎样称才能用三次就找到那个球?...
- 凸优化 [Convex Optimization] — [美] 鲍德(Stephen Boyd),Lieven Vandenberghe 著,王书宁,许鋆,黄晓霖 译
- 20 岁发表 SCI 的学霸,梦想用算法改变世界
- 前端学习(727):冒泡排序原理
- 【HDU - 6186】CS Course(按位与,按位或,按位异或的区间统计,二进制拆位)
- java并发编程实战阅读总结(a)
- java初学者定远期目标_JAVA题,新手求解
- DOM 事件深入浅出(一)
- 10种开发以及改善应用的低成本方法
- C++ 事件驱动型银行排队模拟
- 6-1 多态性与虚函数
- 基于Android的家校联系平台开发(论文)
- 达观电网故障知识图谱,三大功能全面提升电网故障处置效率
- QT报错:The inferior stopped because it received a signal from the Operating System.
- 谷歌发布 12 款 Chrome 新皮肤
- my read travel
- 2020年北大软微推免经历
- 7-4 求幂级数展开的部分和(20 分)
- c语言编程电机星三角启动,三相异步电动机星三角减压启动控制plc编程实例
热门文章
- 递归法:从n个小球中取m个小球(不放回),共有多少种取法?
- GameObject.Find() 和 Transform.Find()的区别
- Unity3D之UGUI基础6:Slider滑条
- 圆方树(bzoj 2125: 最短路)
- bzoj 4017: 小Q的无敌异或(线段树)
- POJ 2243:Knight Moves(双向BFS)
- C++vector基础容器3.0
- [paper reading] CenterNet (Object as Points)
- SDK中利用COM打印helloworld时报错DONE pin is not high on target FPGA的一种可能的解决办法
- 计算机课有什么作业,计算机组成原理课堂作业