找回密码
 注册
关于网站域名变更的通知
查看: 247|回复: 1
打印 上一主题 下一主题

Linux多任务编程(二) ------- 认识一下fork()函数和它的基础实验

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-23 14:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
fork()函数 * |7 t5 x' A+ `, |
) R' j2 Z& K; D1 W; b. i
   在 Linux 中创建一个新进程的唯一方法是使用fork()函数。fork()函数是 Linux 系统中一个非常重要的函数,和咱们以前遇到过的函数由一些区别,因为它看起来执行一次却返回两个值,这又作何解释?不着急,慢慢看。
2 x' V/ C( _. _
& y/ H+ u: A9 _* D' }8 u' W函数说明
0 Y' P2 D  d6 {$ E) H  M) |& ^% N
   fork()函数用于从已存在的一个进程中创建一个新的进程,新进程称为子进程,而原进程称为父进程。使用fork()函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所独有的只有它的进程号、资源使用和计时器等。
9 n8 Y" u5 [0 p5 i5 P" s5 w
  H+ z7 Q2 E4 ^7 _% I+ r. R" e  因为子进程几乎是父进程的完全复制,所以父子进程会运行同一个程序。这就需要用一种方式来区分它们,并使它们照此运行,否则,这两个进程不可能做不同的事。
( y0 f2 _0 d$ I0 a2 x
2 J9 D  z( ?, t* _, t1 N  实际上是在父进程中执行fork()函数时,父进程会复制出一个子进程,而且父子进程的代码从fork()函数的返回开始分别在两个地址空间中同时运行,从而使两个进程分别获得其所属fork()函数的返回值,其中在父进程中的返回值是子进程的进程号,而在子进程中返回0。因此,可以通过返回值来判定该进程是父进程还是子进程。
. q/ }% X/ r( e& W' U* Y
* ^6 U0 w% k9 Z9 U  同时可以看出,使用fork()函数的代价是很大的,它复制了父进程中的代码段、数据段和堆栈段里的大部分内容,使得 fork()函数的系统开销比较大,而且执行速度页不是很快。  Z" u+ a' a" M# S- a' J  u3 L
5 ~# c7 `7 z4 y' Q) Z: ]
函数语法! F* t( Y* I; _' J+ \
5 V$ q5 P/ U2 L9 e. g2 x
游客,如果您要查看本帖隐藏内容请回复
' o0 ^' T$ H  S- c1 D
* j- q+ Z* |; _- {/ k
9 t8 ?& }: v4 Q! J5 O; T8 i3 ^

该用户从未签到

2#
发表于 2019-9-23 18:06 | 只看该作者
认识一下fork()函数和它的基础实验。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 00:47 , Processed in 0.171875 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表