来源:CSDN  作者:王文松 转自Linux公社

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 交叉编译后下载到板子上运行也可。

最新文章

  1. ASP.NET CMS模板培训教程
  2. 无废话SharePoint入门教程五[创建SharePoint页面布局]
  3. Windows 7中无法访问FTP的解决方法
  4. DEDECMS 后台登录空白怎么办 后台无法登陆
  5. Long 陷阱
  6. 在windows下使用linux命令
  7. 让IE浏览器支持CSS3圆角的方法
  8. hdu 4911 Inversion(归并排序求逆序对数)2014多校训练第5场
  9. WPF概述
  10. c++实现atoi()和itoa()函数(字符串和整数转化)
  11. Everything 使用记录
  12. 再起航,我的学习笔记之JavaScript设计模式16(享元模式)
  13. SSH网上商城---邮件发送
  14. Java-collections总结
  15. Collections of Zujin Zhang's Published works
  16. Win10 高分屏软件界面字体模糊问题解决
  17. jquery 学习(六) - 事件绑定
  18. C语言中的数组与指针
  19. sqlite3常用指令
  20. [Python WEB开发] 使用WSGI开发类Flask框架 (二)

热门文章

  1. IDEA优化内存配置,可提高启动和运行速度
  2. go 项目目录结构
  3. Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘
  4. CVE-2018-12613 phpmyadmin文件包含getshell连载(三)
  5. JS中函数执行顺序的问题?
  6. Linux Pam后门总结拓展
  7. Spring Boot]SpringBoot四大神器之Actuator
  8. java 中的 viewUtils框架
  9. netty解决TCP的拆包和粘包的解决办法
  10. 关于idea的一些快捷键