fork的基本常识
pid_t fork( void);
fork进程调用一次,返回两次。
返回值,子进程返回0,父进程返回子进程的ID值。
详细分析
子进程是父进程副本,他会获得父进程数据空间,堆,栈等资源的副本。
cow(copy on write)机制
在复制一个对象的时候并不是真正的把原先的对象复制到内存的另外一个位置上,而是在新对象的内存映射表中设置一个指针,指向源对象的位置,并把那块内存的Copy-On-Write位设置为1.这样,在对新的对象执行读操作的时候,内存数据不发生任何变动,直接执行读操作;而在对新的对象执行写操作时,将真正的对象复制到新的内存地址中,并修改新对象的内存映射表指向这个新的位置,并在新的内存位置上执行写操作。
fork出错可能有两种原因
当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN。
系统内存不足,这时errno的值被设置为ENOMEM。