首页 > 系统服务 > 详细

【Linux应用】vfork和fork的区别

时间:2021-09-03 22:59:34      阅读:21      评论:0      收藏:0      [点我收藏+]

  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的区别

原文:https://www.cnblogs.com/lc0811/p/15223608.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!