linux系统fork和vfork之间的差异性
首先两个接口均是调用clone系统调用,只不过向其中传递的参数标志位不同
差异 | fork | vfork |
---|
共享资源 | 代码段、数据段 | 数据段 |
执行次序 | 父子进程执行次序不确定 | 子进程优先执行 |
父进程是否阻塞 | 否 | 是 |
实际上linux系统中的针对写实拷贝机制作出的优化,还是会让fork出来的子进程优先执行
写时拷贝
创建的子进程与父进程共享资源,内核没有为子进程独立申请物理内存,而是与父进程共享
只有当该物理内存被写时,才会为子进程新创建物理内存;
而linux内核创建子进程时,优先调度子进程执行,直接执行exec,这样就不需要为子进程拷贝资源