浅谈Linux中的fork和vfork的区别

业界的各位同行都知道,fork函数和vfork函数都是进行创建一个进程的。但是呢,各位知道它们之间有什么区别吗?接下来就让我给大家阐述一下:

   我总结了一下几个区别:

  1. fork()创建的子进程拷贝了父进程的代码段,数据段,堆栈;而vfork()创建出来的子进程和父进程共享数据段;
  2. fork()创建的子进程执行次数不确定,操作系统对他们进行交替执行,而vfork()创建出来的必须要保证子进程先执行,子进程在调用exit()或exec()函数之前和父进程共享数据段和代码段,相当于线程的概念,父进程阻塞等待,子进程在它调用exit()或exec()函数之后父进程才可能被调度执行。

那我们就会问已经有了fork了,为什么还要有个vfork呢?

   原因:以前的fork当它创建一个子进程时,将会创建一个新的地址空间,并且拷贝父进程的资源,然后将会有以下这两种行为:

                1.执行从父进程那里拷贝过来的代码段;

                2.调用一个exec()执行一个新的代码段;

当一个子进程调用了exec()之后,然后一个全新的子进程替换了当前的代码段,数据段,堆栈。去执行他想要执行的功能,这样的话,对于fork而言,之前的拷贝工作都白费了,于是呢人们就提出了vfork(),vfork并不会拷贝父进程的进程环境,它和父进程共享运行地址空间,所以子进程不可以进行写操作,并且当儿子“霸占”着老子的房子时候,要委屈老子一下了,让他在外面歇着(阻塞),一旦儿子执行了exec或者exi

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值