免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: ILoveMK
打印 上一主题 下一主题

waker进来一下啊,有个问题要请教你 [复制链接]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
41 [报告]
发表于 2009-07-27 09:59 |只看该作者

回复 #40 Minsic 的帖子

对于这句话,前面的贴子也说清楚了吧?

论坛徽章:
0
42 [报告]
发表于 2009-07-27 10:01 |只看该作者
讨论的真是热火朝天啊

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
43 [报告]
发表于 2009-07-27 10:02 |只看该作者
原帖由 Minsic 于 2009-7-27 09:58 发表


“要产生子shell当然需要fork+exec” ——这句话让我很迷惑,这样就意味着(echo 1)是fork-exec,而不是仅仅fork;而(sleep 10)就是fork-exec-exec了,不过前面你的回答应该否定了这点



哦,那我更坚 ...

如果把子shell看成子进程(通常是一样的)只需要fork


如果你要bash产生一个csh子shell,那就只能fork然后exec csh了

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
44 [报告]
发表于 2009-07-27 10:05 |只看该作者
原帖由 blackold 于 2009-7-27 09:59 发表
对于这句话,前面的贴子也说清楚了吧?


现在我再回头看看woodie 22楼的帖子,觉得就是我2楼的意思

大概都是我自己烧了个火坑,然后拼命往里跳 -_-

原帖由 waker 于 2009-7-27 10:02 发表

如果把子shell看成子进程(通常是一样的)只需要fork


如果你要bash产生一个csh子shell,那就只能fork然后exec csh了


bash要产生csh子shell,就不可能用()的方式了吧,那就不会搞晕了

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
45 [报告]
发表于 2009-07-27 10:08 |只看该作者
原帖由 waker 于 2009-7-27 09:16 发表
这两天没来,4楼woodie的好理解多了,不过有个特例
比如
(sleep 10),这时候虽然sleep是个外部命令,但它是个简单命令,subshell同样不再fork,就直接exec了,观察的时候不要被迷惑。

另外还有根本不存在父子进程互相改变变量环境变量的问题,fork以后就是两个进程,要相互影响必须进行进程间通信,子进程改不改变环境是它自己的事,父进程也是管不了的,儿子不能管老子,老子同样不能管儿子


嗯,(sleep 10)会直接exec sleep,不另fork,又一次英明地避免了脱裤子放屁。

子进程和父进程,是两个独立的进程,fork后都无法直接访问对方的内部结构或着数据,这是很正确的。就好像大兔子生了小兔子,大兔子吃了小兔子不会饱,小兔子吃了大兔子同样不会饱一样。
不过父进程确实可以在某种程度上对子进程产生影响,比如决定哪些东西会“遗传”给子进程,它实际上是可以选择有所作为。反之则不然。正如我们可以说儿子像爸爸,但不能说爸爸像儿子一样。不过,如何处理“遗传”的结果则是子进程的事情,父进程也爱莫能助。
通常我们之所以强调子进程不能改变父进程的环境,主要是因为太多初学者常犯一些错误,比如cat file | read var之类。其实只要懂得这一点,就能明白原因了。

论坛徽章:
1
丑牛
日期:2014-08-07 17:07:05
46 [报告]
发表于 2009-07-27 10:22 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
47 [报告]
发表于 2009-07-27 11:19 |只看该作者

回复 #45 woodie 的帖子

很多人就是理解不了fork以后得到两个一模一样互不相干的进程,老要掺在一块儿研究
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP