个人主页:Lei宝啊
愿所有美好如期而遇
前言
前面的章节已经使用过fork,并且也已经对fork函数需要注意的问题做了解释,本次我们将其串联起来做总结。
首先,使用fork函数后,父进程会创建子进程,创建成功给父进程返回子进程pid,给子进程返回0(也就是说父进程创建子进程后返回了子进程的pid,而子进程创建成功后返回了0),创建失败给父进程返回-1,并且fork后的数据和代码共享,以及为什么能够返回两个不同的值,是因为当操作系统创建父子进程后,父子进程都要有他们各自的创建结果,这个结果最终返回都是以寄存器方式返回的,我们的父进程和子进程在进行切换的时候,本质就是进程的上下文切换,所以当他们创建后返回的值,本质也就是返回到CPU的计算器当中,然后通过计算器写到我们的变量里,这也就注定了我们写入时一定不是同一个时间点。
再一个,fork函数之后,先调度哪个进程,由调度器决定。
fork函数还需要提及的是写时拷贝,我们在进程地址空间那里详细解答了写时拷贝的原理,就是当父子进程中任意一个进程在对数据做写入时,由于他们对数据只有读权限,此时操作系统就会介入,进行写时拷贝,在内存中新开辟空间并拷贝旧的数据,接着将父子进程对这个数据的权限改为读写权限。