fork vfork exec

vfork() differs from fork() in that the parent is suspended until the child makes a call to execve(2) or _exit(2).

1:内核创建进程的主要开销:生成进程描述符,复制父进程的地址空间给子进程,复制页表。

2:fork工作过程,内核为子进程创建一个新的进程描述符,开始时候子进程共享父进程的进程地址空间,并复制父进程的页表给子进程。当子进程修改页表时候(写操作的时候,这种情形下,页表有中的页具有写保护),此时内核会将父进程的地址空间全部复制给进程的地址空间(COW技术,写时复制技术),并分配物理内存给子进程,更新子进程的页表。写时复制技术的体现,子进程先于父进程执行。

3::vfork工作过程,内核为子进程创建一个新的进程描述符,子进程共享父进程的地址空间,然后子进程执行,父进程阻塞,直到子进程中调用了exit()或者exec系列的函数(vfork创建进程时候,子进程中一般要用exit或者execv,否则会出现异常)。当子进程中调用exec系列函数的时候(内核会重新为子进程分配地址空间,分配物理内存,建立页表),一般用vfork来创建进程,好处是内核无需拷贝父进程的地址空间给子进程。


注释:一些术语及相关知识本人了解的就没有在此描述了,请谅解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值