对fork()函数的探究

在Linux环境下,创建一个新的进程,要用fork()函数

调用fork()成功后,会有一个新的进程,它是父进程的一个副本,并采用“写时拷贝”的思想使用各类资源。两个进程都从fork()函数中返回,所以会有两个返回值,它会给父进程返回子进程的pid,给子进程返回0。

有一个程序如下:
这里写图片描述
运行结果:
这里写图片描述
这里我们很容易能够分析出来,因为父子进程代码段共享,所以它们会打印出各自的pid;
如果把上述程序修改如下,结果会打印出几条语句呢?
这里写图片描述
运行结果:
这里写图片描述
一共打印了六条,这又如何分析呢?

这里写图片描述

因为两个进程代码和数据是相同的,所以两个进程中的i都是1;

这里写图片描述

每一个进程都会打印一个语句,所以一共是6条;

如果条件是i<3呢?结果应该是2+4+8;

到这里我们已经基本分析清楚了,但是我还有一个疑问,父子进程运行的先后顺序是如何决定呢?
答案是随机的,因为子进程被创建后,作为一个进程何时可以运行,是由操作系统中各种调度算法决定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值