Linux多任务编程(二)---fork()函数及其基础实验
来源:互联网 发布:linux telnet 端口测试 编辑:程序博客网 时间:2024/06/05 19:40
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 交叉编译后下载到板子上运行也可。
下一节:http://blog.csdn.net/mybelief321/article/details/9055589
- Linux多任务编程(二)---fork()函数及其基础实验
- Linux多任务编程(二)---fork()函数及其基础实验
- Linux多任务编程(二)---fork()函数及其基础实验
- Linux多任务编程(三)---exec函数族及其基础实验
- Linux多任务编程(四)---exit()函数及其基础实验
- Linux多任务编程(五)---wait()、waitpid()函数及其基础实验
- Linux多任务编程(三)---exec函数族及其基础实验
- Linux多任务编程(四)---exit()函数及其基础实验
- Linux多任务编程(五)---wait()、waitpid()函数及其基础实验
- Linux多任务编程(三)---exec函数族及其基础实验
- Linux多任务编程(三)---exec函数族及其基础实验
- Linux多任务编程(四)---exit()函数及其基础实验
- Linux多任务编程(七)---Linux守护进程及其基础实验
- Linux多任务编程(七)---Linux守护进程及其基础实验
- 【Linux基础】fork函数
- Linux基础(二)fork()进程
- linux系统编程之进程(二):fork函数相关总结
- linux系统编程之进程(二):fork函数相关总结
- 博客开始
- eclipse启动参数里设置jvm大小
- javascript获取下拉列表多个选项值
- Ubuntu 12.04 Precise LTS: Install ModSecurity for Apache 2 web server
- 黑马程序员之编写对class文件进行加密的工具类
- Linux多任务编程(二)---fork()函数及其基础实验
- Next Power of 2
- 设计模式(17)---->中介者模式
- Chrome浏览器插件开发心得
- Linux Kbuild工作原理分析(以DVSDK生成PowerVR显卡内核模块为例)
- WEB架构师成长之路之一-走正确的路
- linux shell自动变量$#,$@,$0,$1,$2
- 项目开发流程(期间使用的UML图表)
- ACE学习(二)原子操作与ACE_Atomic_Op