赞
踩
一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。而这个现有进程是所谓的父进程。
当创建一个子进程时,子进程的PCB只拷贝父进程的一部分,但是却完全拷贝了用户空间,也就是将父进程中用户空间的栈,库,堆,以及全局变量和局部变量都拷贝到子进程中,
父子进程的执行流程:
父进程是从第一行开始执行的,而子进程代码是从fork()后执行的,
如图是fork的执行过程
可见其父进程是从代码的第一行开始执行的,而子进程是从fork()之后执行的,执行过程虽然有差异,但是子进程是把父进程的所有代码拷贝到自己的用户空间的。
这个图虽然有点丑,但是可以明确表示出其创建子进程的父子关系
首先父进程执行代码,执行四个连续的fork()函数,就会创建四个相同的子进程;
拿子进程A作为例子,程旭执行到第一个fork()时创建的进程A,进程A从第二个fork()执行,便有了A作为父进程的三个子进程,而a1是父进程A的第一个fork()创建出的子进程,便有了以a1为父进程的两个子进程a11 和a21,以这样的关系循环下去,其他的子进程便被创建出来了,所以最终创建了15个子进程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。