vfork函数

一 进程存储布局:

代码区:存放CPU指令

数据区:已经初始化的全局变量,已经初始化局部静态变量,常量数据,如字符串常量。

BSS区:未初始化的全局变量,未初始化静态变量。

堆区:malloc函数分配内存的空间。由程序员控制

栈区:函数空间。

以上几个区域地址由低到高排列。栈的内存分配是由高往低分配的,因为栈顶的地址是确定的。

二   fork与vfork的区别:

早期fork会复制父亲进程的所有资源包括,代码段,数据段,BSS,以及堆栈。这样的话,就有可能造成资源浪费,因为人家子进程里面不一定是要执行你父亲进程的程序,例如调用exec。因此后来fork实现了写时复制,节省了系统开销。这样的话,vfork失去了它的价值。

       vfork与fork的区别在于,父子进程是是共享资源的。这样设计是针对子进程里面调用exec系列函数的。

      用vfork函数创建子进程有以下注意事项:

                A:首先,子进程一定是先于父亲进程执行的。

B:子进程在没有调用exec系列函数或者_exit()函数之前,子进程一直不退出并且是一直霸占着父亲进程的资源。这个时候如果父亲进程里面执行任何代码,都会出现段错误(应该是此时访问了受保护的内存)。

C:在子进程中调用了exec成功调用系列函数之后,exec之后的程序不会执行!

D:vfork创建的子进程并非必须调用_exit()函数才退出。

三  父子进程里面对打开的文件是共享的!

四   孤儿进程是指退出后被init进程收养的进程。僵死进程是已经退出但是没有回收资源的进程!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值