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

来源:互联网 发布:专业汽车维修软件 编辑:程序博客网 时间:2024/05/16 10:30


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

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

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


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



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