关于subshell的问题

发布于 2022-10-15 10:04:51 字数 1381 浏览 52 评论 0

我看了一篇教程: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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

黯淡〆 2022-10-22 10:04:51

童子们,有什么想法的说说看啊。

凌乱心跳 2022-10-22 10:04:51

ping -c 5 163.com >/dev/null &

学习一下stdin stdout和stderr

谈下烟灰 2022-10-22 10:04:51

我相信IBM那个结果是杜撰的,为了突出重点。

旧时浪漫 2022-10-22 10:04:51

或者是像我这样

snapshot1.png (70.8 KB, 下载次数: 21)

下载附件

2011-04-14 21:01 上传

通知家属抬走 2022-10-22 10:04:51

我相信IBM那个结果是杜撰的,为了突出重点。
yanu 发表于 2011-04-14 20:57

我正是因为不相信这个结果是杜撰的才来发这个话题。
我在csdn上也发了相同内容的帖子,如果那边有什么说法的话,我会贴过来让大家参考。
stdout,stdin这些,我大概明白一些。

给我一枪 2022-10-22 10:04:51

我正是因为不相信这个结果是杜撰的才来发这个话题。
我在csdn上也发了相同内容的帖子,如果那边有什么 ...
mengyingchuxian 发表于 2011-04-14 21:45

   

参考5楼图片

尐籹人 2022-10-22 10:04:51

什么叫后台进程??

标准输出继承于父进程, 为什么成为“后台进程”之后就不输出了?

命令结尾处的&符号究竟是什么意思?

溺渁∝ 2022-10-22 10:04:51

所谓后台进程,我理解,应该是不需要与用户交互,能独立运行的任务。所以如果一个进程要将它的输出定位到标准输出的话,不能称其为后台进程。
标准输出继承于父进程没有错,但是在用括号将某个命令括起来以后,这个命令产生的进程的父进程ID是1,也就是说,它不再是当前shell的子进程。那么它也不应该再有使用当前shell的权限。
命令结尾处的&单独使用的意思,我确实没有仔细研究过,我知道这样的写法:
ping xxx &>/dev/null
&在这里代表标准输出流和标准错误流。如果省略后面重定向,我觉得也应该是有一个默认的重定向位置才对,可以这样理解么?

み零 2022-10-22 10:04:51

本帖最后由 yanu 于 2011-04-14 23:03 编辑

你还是好好看书吧。我都不知道该从哪开始纠正好了

子进程可不是通过父进程输出的, 一个进程要么有自己的stdout,要么就闭嘴当哑巴。

命令外面加上括号,也还是由当前shell启动,启动后转交给init那又是另外一回事,

snapshot2.png (40.86 KB, 下载次数: 23)

下载附件

2011-04-14 23:03 上传

-----------------------------
论坛什么破程序啊,每次贴东西上来都被搞乱掉 ,

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文