关于subshell的问题
我看了一篇教程:http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html
里面有一个subshell的示例:
[root@pvcent107 ~]# (ping www.ibm.com &)
[root@pvcent107 ~]# ps -ef |grep www.ibm.com
root 16270 1 0 14:13 pts/4 00:00:00 ping www.ibm.com
root 16278 15362 0 14:13 pts/4 00:00:00 grep www.ibm.com
但在我的机器上,我试了一下,却不是这样的,在我的Redhat上是这样的结果:
[root@localhost ~]# (ping 192.168.19.1 &)
[root@localhost ~]# PING 192.168.19.1 (192.168.19.1) 56(84) bytes of data.
64 bytes from 192.168.19.1: icmp_seq=1 ttl=128 time=2.99 ms
64 bytes from 192.168.19.1: icmp_seq=2 ttl=128 time=1.58 ms
64 bytes from 192.168.19.1: icmp_seq=3 ttl=128 time=0.721 ms
也就是说,subshell中的输出被显示到了当前shell上。
为什么会这样呢?
另外,我觉得即使不将这个命令放到括号中运行,也不应该有输出,因为我已经指定它是一个后台进程,但是事实是这样:
[root@localhost ~]# ping 192.168.19.1 &
[1] 5650
PING 192.168.19.1 (192.168.19.1) 56(84) bytes of data.
[root@localhost ~]# 64 bytes from 192.168.19.1: icmp_seq=1 ttl=128 time=1.84 ms
64 bytes from 192.168.19.1: icmp_seq=2 ttl=128 time=1.10 ms
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
童子们,有什么想法的说说看啊。
ping -c 5 163.com >/dev/null &
学习一下stdin stdout和stderr
我相信IBM那个结果是杜撰的,为了突出重点。
或者是像我这样
snapshot1.png (70.8 KB, 下载次数: 21)
下载附件
2011-04-14 21:01 上传
我正是因为不相信这个结果是杜撰的才来发这个话题。
我在csdn上也发了相同内容的帖子,如果那边有什么说法的话,我会贴过来让大家参考。
stdout,stdin这些,我大概明白一些。
参考5楼图片
什么叫后台进程??
标准输出继承于父进程, 为什么成为“后台进程”之后就不输出了?
命令结尾处的&符号究竟是什么意思?
所谓后台进程,我理解,应该是不需要与用户交互,能独立运行的任务。所以如果一个进程要将它的输出定位到标准输出的话,不能称其为后台进程。
标准输出继承于父进程没有错,但是在用括号将某个命令括起来以后,这个命令产生的进程的父进程ID是1,也就是说,它不再是当前shell的子进程。那么它也不应该再有使用当前shell的权限。
命令结尾处的&单独使用的意思,我确实没有仔细研究过,我知道这样的写法:
ping xxx &>/dev/null
&在这里代表标准输出流和标准错误流。如果省略后面重定向,我觉得也应该是有一个默认的重定向位置才对,可以这样理解么?
本帖最后由 yanu 于 2011-04-14 23:03 编辑
你还是好好看书吧。我都不知道该从哪开始纠正好了
子进程可不是通过父进程输出的, 一个进程要么有自己的stdout,要么就闭嘴当哑巴。
命令外面加上括号,也还是由当前shell启动,启动后转交给init那又是另外一回事,
snapshot2.png (40.86 KB, 下载次数: 23)
下载附件
2011-04-14 23:03 上传
-----------------------------
论坛什么破程序啊,每次贴东西上来都被搞乱掉 ,