Linux下进程创建Fork()函数分析


一个进程包括代码、数据、进程控制块、堆栈等资源。进程在运行时还有自身的状态,这个自身的状态不是指宏观上的就绪态、等待态,而是指进程在CPU上运行时,CPU内部各个寄存器的值,进程在切换的时候,这些状态值是要保存在堆栈当中的,目的是下次进程运行时能够“无缝”连接。

Linux下,用于创建进程的函数是fork()函数。fork()函数创建的“子进程是父进程的一个完整拷贝”,也就是说子进程和父进程基本一样,不但拷贝了父进程的数据,也拷贝了父进程的代码,还有一个关键的地方是拷贝了父进程的运行状态,也就是说父进程运行到了什么地方,子进程运行是也是从对应的代码位置开始运行的。因此子进程是从自身被创建的代码处开始执行的

下面我们举个例子,看看下面代码中创建了多少个子进程。


那么图中的代码共创建了多少个进程呢?这里大家需要注意的是“&&”操作,该操作的左边操作数如果为0,那么后面的语句就不执行了,与操作么,左边为0,右边就不用算了,结果肯定为0!因此如果父进程在执行“fork()&&fork()”语句中的第一个fork时,会生成一个子进程,但是由于该子进程给自身的返回值是0,因此该子进程在执行时,不会执行“fork()&&fork()”语句中后面的fork。具体的流程请看下面手画的图。



老羊快跑 微信公众号,欢迎关注。我们有最好的操作系统课程微论坛

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值