fork建立一个子进程,原来进程叫父进程
fork()调用的一个奇妙之处就是它仅仅被调用一次,却可以返回两次,它可能有三种不一样的返回值:segmentfault
常见模式:session
fork出错可能有2种缘由:spa
在fork以后两个进程 用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,二者的虚拟空间不一样,但其对应的 物理空间是同一个。.net
当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间。blog
实现原理:
fork()以后,kernel把父进程中全部的内存页的权限都设为read-only,而后子进程的地址空间指向父进程。当父子进程都只读内存时,相安无事。当其中某个进程写内存时,CPU硬件检测到内存页是read-only的,因而触发页异常中断(page-fault),陷入kernel的一个中断例程。中断例程中,kernel就会 把触发的异常的页复制一份,因而父子进程各自持有独立的一份。进程
https://blog.csdn.net/qq_3455...
https://zhuanlan.zhihu.com/p/...内存