fork()函数和vfork()函数的区别

创建进程时主要用到一下两个函数
1:fork()函数
a:如果执行成功,在父进程中将返回子进程(新创建的进程)的PID,类型为pid_t,子进程将返回0,区别父进程;
b:执行失败返回-1;
子进程执行的位置为fork()返回的位置,父子进程对于局部变量(栈空间)执行复制操作,对于文件描述符的文件表信息(文件的读写位置)共享使用。
2:vfork()函数
vfolk()函数创建新进程的时候不复制进程地址空间,而是在必要的时候才申请存储空间。如果子进程只执行exec()函数,则使用fork函数从父进程到子进程的数据空间将不被使用。
exec函数
exec函数族提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了

相比fork函数,vfork()函数可以很大程度上提升性能,vfork只在需要时复制,而一般采用与父进程共享所有资源的方式进行处理。

简单记忆:
fork()函数是复制一个父进程的副本,从而拥有自己独立的代码段,数据段,以及堆栈空间,即成为一个独立的实体。
vfork函数是共享父进程以及数据段。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值