【Linux应用】vfork和fork的区别

  vfork()函数和fork()函数主要由以下两个区别:

  • vfork()与fork()一样都创建了子进程,但vfork()函数并不会将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec(或_exit),于是也就不会引用该地址空间的数据。不过在子进程调用exec和_exit之前,它在父进程的空间中运行、子进程共享父进程的内存。这种优化工作方式的实现提高了效率;但如果子进程修改了父进程的数据(除了vfork返回值的变量)、进行了函数调用、或者没有调用exec或_exit就返回将可能带来未知的结果。
  • vfork()保证子进程先执行,子进程调用exec之后父进程才可能被调度执行。

  虽然vfork()系统调用在效率上要由于fork(),但是vfork()可能会导致一些难以察觉的bug,所以尽量避免使用vfork()来创建子进程,虽然效率上并没有vfork()高,但是现代的Linux系统内核已经采用写时复制技术来实现fork(),其效率较之于早期的fork()实现要高出许多,除非速度绝对重要的场合,我们的程序应当舍弃vfork()而使用fork()。

【Linux应用】vfork和fork的区别

上一篇:VMware虚拟机扩展内存和磁盘


下一篇:Eclipse设置编码格式