免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
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
31 [报告]
发表于 2009-07-24 10:04 |只看该作者
根据http://www.sch239.spb.ru:8000/info/oreilly/unix/ksh/ch08_06.htm里的说法,()除了继承环境变量外,与一般的subshell不同的是,还能够能够继承父shell的一般变量,那么


子进程不但继承环境变量,也继承父shell的一般变量,不分什么nestsubshell还是普通subshell,至于怎么处理这些变量是子进程自己的事,明白了么?你不能说拿了人家十块钱花掉了就等于没拿人家的钱

论坛徽章:
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
32 [报告]
发表于 2009-07-24 10:10 |只看该作者
waker意思是exec会清除非环境变量?那么你在前面11楼举的这个例子:

QUOTE:
(/bin /echo;/bin/echo)首先shell fork一个subshell(子进程一代),由于/bin/echo;/bin/echo不是个简单命令,那就不能节省了,子进程一代fork出子进程二代A,去exec第一个/bin/echo,等它结束后,再fork出子进程二代B,去exec第二条/bin/echo,而命令行的那个shell在等待fork出子进程一代的结束

如果修改一下,改成(/bin/echo $a;/bin/echo $b),你认为在其父shell定义的a和b变量不能被这个nested subshell继承,从而会显示两个空行吗?或许我理解错了26楼关于“exec会清除数据”的那段话?

如果a=xxoo
$a对于()产生的子进程,就是从父shell哪儿复制来的自己的变量a,它的值是xxoo
而要运行/bin/echo $a,就要fork产生孙进程,而孙进程里又复制了一个自己的$a,随后exec这个变量就没了,能显示出xxoo完全是/bin/echo得到了一个位置参数变量argv[1],它的值是xxoo

论坛徽章:
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
33 [报告]
发表于 2009-07-24 10:10 |只看该作者
A>(/bin/echo $a;/bin/echo $b)
这会产生几个subshell:A--fork-->B------fork--->C(exec echo $a)
                                          |------fork--->D(exec echo $b)


清除也只是清除C,D啊。

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

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

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

回复 #34 ILoveMK 的帖子

bashman里面有详尽解说。

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

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
38 [报告]
发表于 2009-07-24 10:19 |只看该作者
晕了,我要崩溃了,千言万语不知道该如何说起

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

回复 #37 ILoveMK 的帖子

你不会skim and scan吗?
(a=2;echo $a)是个list,不是简单命令。

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

回复 #38 Minsic 的帖子

这种东西要慢慢才能消化的,另想一次完全消化,就像读论语一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP