1.传统的fork()函数
建立一个子进程,子进程和父进程共享正文段,复制数据段,堆,栈到子进程
示意图以下:函数
2.Linux的fork()函数-写时复制(copy-on-write)
建立一个子进程,内核只为子进程建立虚拟空间,不分配物理内存,和父进程共享物理空间,
当父进程中有更改相应段的行为发生时,才为子进程分配物理空间。
示意图以下:blog
3.vfork()函数
建立一个子进程,共享父进程的一切。
示意图以下:进程
4.传统fork与copy-on-write区别内存
传统的fork函数直接把全部资源复制给新的进程,效率很低下。
写时拷贝在须要写入时,数据才会被复制,没有数据写入时,fork()的开销实际只是复制父进程的页表以及给子进程建立惟一的进程描述符。有数据要写入前,会将将要改变的数据页复制给子进程。资源