免费注册 查看新帖 |

Chinaunix

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

关于subshell和child process的问题 [复制链接]

论坛徽章:
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
51 [报告]
发表于 2009-07-24 10:51 |只看该作者

回复 #47 #48楼 Minsic 的帖子

现在我没有看出链接中有什么错误。

waker也没说有问题吧。

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
52 [报告]
发表于 2009-07-24 10:56 |只看该作者
原帖由 blackold 于 2009-7-24 10:51 发表
现在我没有看出链接中有什么错误。

waker也没说有问题吧。


我的想法其实很简单,我先不管fork-exec这些过程——我个人认为lululau的帖子里所画的图是正确的——因为到现在为止,我问了N次,虽然没人给我肯定的回答,但也还没人否定他

至于变量的处理,我也认为你给的链接里说的是正确的,至少我更理解那种说法,而几种subshell的情况我又是这么认为的:运行一个脚本,fork的我暂且称它为script subshell,然后()和外部命令所fork的是nested subshell,这么理解,对否?

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
53 [报告]
发表于 2009-07-24 10:59 |只看该作者
原帖由 ILoveMK 于 2009-7-24 10:30 发表

那(a=2;echo $a)和(echo $a;echo $b)一样需要两次fork??


(/bin/echo $a;/bin/echo $b)才需要两次fork,因为/bin/echo是外部命令,而echo是内部命令,type -a echo可以看到这些说明。

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

论坛徽章:
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
55 [报告]
发表于 2009-07-24 11:05 |只看该作者

回复 #52 Minsic 的帖子

lululau图中5明显是有问题的嘛,还要如何回答?

nested shell就是(),简单外部命令的执行应该和()一样。

论坛徽章:
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
56 [报告]
发表于 2009-07-24 11:07 |只看该作者

回复 #54 ILoveMK 的帖子

晕!

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
57 [报告]
发表于 2009-07-24 11:08 |只看该作者
原帖由 blackold 于 2009-7-24 11:05 发表
lululau图中5明显是有问题的嘛,还要如何回答?

nested shell就是(),简单外部命令的执行应该和()一样。


你是说他的第五张图是错的?我实在看不出来,哪错? - -

就是这张?



至于关于几种subshell的分类,你认为我上面说的是正确的咯

[ 本帖最后由 Minsic 于 2009-7-24 11:10 编辑 ]

论坛徽章:
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
58 [报告]
发表于 2009-07-24 11:13 |只看该作者

回复 #57 Minsic 的帖子

至少var=`date`肯定要fork-exec啊。

关于subshell的说法,我认为没有什么问题,不过我觉得没有必要这样去给subshell分类。

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
59 [报告]
发表于 2009-07-24 11:21 |只看该作者
原帖由 blackold 于 2009-7-24 11:13 发表
至少var=`date`肯定要fork-exec啊。

关于subshell的说法,我认为没有什么问题,不过我觉得没有必要这样去给subshell分类。




他的图里哪有var=`date`?

论坛徽章:
0
60 [报告]
发表于 2009-07-24 11:26 |只看该作者
原帖由 waker 于 2009-7-23 13:14 发表
$a被展开了么?
a=3
(a=2;echo $a)


fork和exec是两个步骤
父进程里有个变量a;fork以后子进程里也有一个和父进程里一样的变量a;它在两个进程中的虚拟储存位置和储存内容都是一样的,否则怎么叫fork呢? ...


反对:
a=2; echo $a
是两条语句,展开不可能一次对所有语句吧? 改成 ( a=2 echo $a ) 试试?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP