免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3135 | 回复: 10
打印 上一主题 下一主题

学习“vfork”时,遇到小问题,求解。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-27 11:22 |只看该作者 |倒序浏览

这是程序。打印结果不应该是  count=1   count=2 吗?怎么会有如下结果啊?

我是初学者,还望高手指点一二。

论坛徽章:
0
2 [报告]
发表于 2011-10-27 11:49 |只看该作者
vfork保证子进程先运行,在它调用exec或exit后父进程才被调度运行

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2011-10-27 12:20 |只看该作者
回复 1# arson663300


    仔细看看 vfork(2),你对 vfork() 的使用根本就是错误的。

论坛徽章:
0
4 [报告]
发表于 2011-10-27 12:36 |只看该作者
回复 2# orochi_cgj


     把 vfork 换成 fork 可以执行,打印出 count=1  count=1,fork中父子进程没有顺序,其中一个执行完了,接着就执行另一个进程,中间需要exec或exit吗?

论坛徽章:
0
5 [报告]
发表于 2011-10-27 12:38 |只看该作者
回复 3# MMMIX


    可以具体说下吗? 谢了

论坛徽章:
0
6 [报告]
发表于 2011-12-06 12:52 |只看该作者
vfork和fork相比,不会复制页表等,完全在父进程中运行。共用栈空间,子进程的修改操作返回后可能就影响到了父进程。fork可以的原因是,fork采用写时复制技术,变量count在改变时会有二份拷贝,父子进程也互不影响。

论坛徽章:
0
7 [报告]
发表于 2011-12-06 14:34 |只看该作者
随着vfork出的子进程的结束 count也随之被销毁了 主进程输出时引用了无效内存

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2011-12-06 21:49 |只看该作者
回复 1# arson663300


    第一个问题,是你在不清楚的条件下使用了vfork(), 看你是Linux环境,那么在Linux下很不建议使用vfork(),使用fork()就已经足够了。

    出现问题的原因是child/parent share process attributes. 然后child调用了return 对函数栈做了一次清理,导致后面parent的值失效了。 你应该养成良好习惯,对于fork()的结果,对child/parent分别处理,然后child调用_exit()



   至于下面楼层的疑问,如vfork()确保由child先执行,其实这并不是要用vfork()的强制条件, 在linux的fork()条件下,也可以用wait()来使child先行。

   如果是为了race condition,那可以看看<The Linux Programming Interface> 这本书. 里面有讲,对于Linux kernel 2.2/2.4 有不同的语义。
而在2.6.32里可以通过下面这个参数来定~
  1. zt [~]# cat /proc/sys/kernel/sched_child_runs_first
  2. 0
复制代码

论坛徽章:
0
9 [报告]
发表于 2011-12-06 23:26 |只看该作者
为什么这么多人纠结在已不用的函数上呢?

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
10 [报告]
发表于 2011-12-06 23:34 |只看该作者
回复 9# zcheung


    学习一下也好~~经过对比,实践才知道为什么某个设计被废弃了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP