fork,vfork, clone的区别和关系

fork

fork被调用时,复制父进程的页表,创建新的进程描述符task_struct,新创建的进程与父进程对地址空间的关系为 “写时复制” 当进程写数据到地址空间时就重新开辟一块内存来存放新结果。fork的进程一般之后会电泳exec,exec复制读取可执行文件并将其载入地址空间,exec执行完后子进程的地址空间将不再和父进程一样。

vfork

在过去,fork还不是写时复制。而如今,vfork与fork的区别仅仅是不复制页表。 vfork调用后,父进程挂起,子进程仿佛一个线程般共用父进程的地址空间,子进程无法写入,直到子进程退出程序或者执行exec,父进程才能继续运行。

关系

fork,vfork,__clone都调用clone,也就是说,在现代操作系统,fork是clone实现的,它们各具各自需要的参数标志调用clone,clone又调用do_fork(),do_fork()又调用copy_create(),copy_create()会调用函数来为新进程分配内核栈,task_struct(进程描述符),新的PID,然后根据clone的标志执行相应的工作,如是否共享地址空间,是否共享打开的文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值