fork函数分析

来源:互联网 发布:零基础linux教程 编辑:程序博客网 时间:2024/05/16 09:43

前面我们已经说过,一个进程包括代码、数据和分配给进程的资源,进程运行时还有自身的状态。Linux下fork()函数可以用来创建进程,且创建的“子进程是父进程的一个完整拷贝”,子进程拷贝了父进程的数据,也拷贝了父进程的代码和运行状态,因此子进程是从自身被创建的代码处开始执行的

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


从上图的代码和运行结果中我们可以看出,程序一共打印输出了8次,因此一共创建了7个子进程。为什么呢?可以看下图:


main函数运行过程中会创建3个进程,假设为子进程1,子进程2和子进程3;子进程1被创建后,执行其后面的代码,又会创建2个进程,假定为子进程4和子进程5;子进程2被创建后,会执行其后面的代码,又会创建一个进程,假定为子进程6;子进程4被创建后,会执行其后面的代码,又会创建一个进程,假定为子进程7;每个进程都会执行printf和wait函数,因此加上main进程,一共有8个进程。

 

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



0 0
原创粉丝点击