Linux中fork函数的调用情况分析

本文分析了一个使用fork函数创建子进程的C程序。通过详细解释fork函数的行为,阐述了如何确定程序创建的进程总数及各进程可能的输出结果。

分析以下代码输出结果,已知从这个程序执行到这个程序的所有进程结束这个时间段内,没有其它新进程执行。

   1、请说出执行这个程序后,将一共运行几个进程。

   2、如果其中一个进程的输出结果是“pid1:1001, pid2:1002”,写出其他进程的输出结果(不考虑进程执行顺序)。

 
 
 
这里考查的是fork()的调用情况,在Linux中,fork()函数会重新起一个进程,并作为原进程的子进程。该进程保留了原进程中执行到这个fork()函数前的所有数据(变量、环境变量、程序计数器等)的数值,而原进程按照普通流程继续执行。在子进程中,fork()返回0,而父进程返回分配的pid的实际值。
第一步,遇到pid1 = fork(),产生一个子进程(1号),这时父进程的pid1 = 1001,而子进程的pid1 = 0.
第二步,父进程往下执行,遇到pid2 = fork(),又产生一个子进程(2号),父进程的pid2 = 1002,而子进程的pid2 = 0.
第三部,1号子进程往下执行,遇到pid2 = fork(),也产生一个子进程(3号),1号子进程的pid2 = 1003,而3号子进程的pid2 = 0.
 
综合上诉三步,产生的进程号组合是:(1001,1002)、(1001,0)、(0,1003)、(0,0)
当然,上述结果中的1002和1003因为时间先后的因素可以调换,不过题设条件已经做了限定,此处不用考虑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值