免费注册 查看新帖 |

Chinaunix

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

有个shell问题实在是搞不懂!难道是bug? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-12 15:27 |只看该作者 |倒序浏览
#!/bin/bash

# Script name: my_test

cmd="ping -c 10 localhost"
out=`eval $cmd`
echo "$out"


这个脚本执行时,为什么会产生三个进程呢?

[ 本帖最后由 xn_sung 于 2009-6-12 16:38 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-06-12 16:38 |只看该作者

回复 #1 xn_sung 的帖子

ksh就不是这样?难道这是bash的bug?

论坛徽章:
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
3 [报告]
发表于 2009-06-12 16:41 |只看该作者

回复 #2 xn_sung 的帖子

不同的shell怎么会一样?

论坛徽章:
0
4 [报告]
发表于 2009-06-12 17:35 |只看该作者

论坛徽章:
0
5 [报告]
发表于 2009-06-12 18:13 |只看该作者
原帖由 blackold 于 2009-6-12 16:41 发表
不同的shell怎么会一样?


你确认bash这种行为是合理的吗?

论坛徽章:
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
6 [报告]
发表于 2009-06-12 18:19 |只看该作者

回复 #5 xn_sung 的帖子

存在的都是合理的。

论坛徽章:
0
7 [报告]
发表于 2009-06-12 18:21 |只看该作者
原帖由 blackold 于 2009-6-12 18:19 发表
存在的都是合理的。


  1. [root@stest cgi-bin]# cat my_test
  2. cmd="ping -c 3 localhost"
  3. out=$(eval $cmd)&
  4. ps -ef |egrep "my_test|ping"
  5. wait
  6. [root@stest cgi-bin]# bash my_test
  7. root     32741 32515  0 18:15 pts/0    00:00:00 bash my_test
  8. root     32742 32741  0 18:15 pts/0    00:00:00 bash my_test
  9. root     32743 32742  0 18:15 pts/0    00:00:00 bash my_test
  10. root     32744 32743  0 18:15 pts/0    00:00:00 ping -c 3 localhost
  11. [root@stest cgi-bin]# ksh my_test
  12. root     32753 32515  0 18:15 pts/0    00:00:00 ksh my_test
  13. root     32754 32753  0 18:15 pts/0    00:00:00 ksh my_test
  14. root     32756 32754  0 18:15 pts/0    00:00:00 ping -c 3 localhost
  15. [root@stest cgi-bin]#
复制代码


好,暂且认为是合理的,那为什么bash会比ksh多一个进程?脚本里并没有fork进程,这种行为会引起混乱

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
8 [报告]
发表于 2009-06-12 18:33 |只看该作者

回复 #7 xn_sung 的帖子

因为ksh中,最后一个管道是在当前shell中运行的
而bash中,所有的管道都是在子shell中运行的

论坛徽章:
0
9 [报告]
发表于 2009-06-12 20:59 |只看该作者

回复 #8 ly5066113 的帖子

timDX,除了像类似这样的
echo a|read b;echo $b
可以证明,还有其它角度可以说明这个问题的吗?

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
10 [报告]
发表于 2009-06-12 21:56 |只看该作者

回复 #9 haimming 的帖子

进程方面还没有理解的很透彻,不敢妄言,看看这2个帖子,也许有帮助
http://bbs.chinaunix.net/viewthread.php?tid=733138
http://bbs.chinaunix.net/viewthread.php?tid=742295
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP