免费注册 查看新帖 |

Chinaunix

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

【请教】ps -ef|grep "abc" 的结果为什么会显示出grep abc [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-13 11:12 |只看该作者 |倒序浏览
在ps -ef | grep "abc" 匹配行时,为什么结果里面会有条grep abc的记录?

示例如下:
-bash-3.00$ ps -ef |grep "abc"
  zhouyj  3844 14914   0 11:06:10 pts/113     0:00 grep abc
-bash-3.00$ ps -ef |grep abc
  zhouyj  3857 14914   0 11:06:14 pts/113     0:00 grep abc

请各位朋友帮忙解答下,谢谢!

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
2 [报告]
发表于 2011-12-13 11:15 |只看该作者
那个是grep的进程,你应该这样,过滤掉grep
  1. ps -ef | grep "abc" | grep -v grep
复制代码

论坛徽章:
17
CU大牛徽章
日期:2013-03-13 15:32:35午马
日期:2014-07-29 13:09:18未羊
日期:2014-09-19 16:21:07巳蛇
日期:2014-09-29 16:17:06巳蛇
日期:2014-10-16 08:33:00白羊座
日期:2014-10-16 09:10:24申猴
日期:2015-01-09 11:36:332015年亚洲杯之澳大利亚
日期:2015-03-03 13:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之沙特阿拉伯
日期:2015-03-27 11:24:282015亚冠之阿尔纳斯尔
日期:2015-06-16 11:50:23CU大牛徽章
日期:2013-03-13 15:38:15
3 [报告]
发表于 2011-12-13 11:33 |只看该作者
grep也是一个进程

论坛徽章:
0
4 [报告]
发表于 2011-12-13 12:02 |只看该作者
回复 2# chenyx


此时的grep是个进程是正确的
1、但根据 “| 管道”的意思,是把 “|”之前的内容做为 “|”之后命令的输入,难道这里的管道是并发的?
2、如果此时的管道是并发的话,那么并发管道什么时候才出现? 执行 ls |grep "abc" 这个命令的时候,为什么在进程中没有查到grep abc的进程?

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2014-03-27 15:44:382015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2011-12-13 12:40 |只看该作者
你ls 又不是查看进程。。。。。

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
6 [报告]
发表于 2011-12-13 13:50 |只看该作者
楼主出现的那个匹配的是grep后面的abc,就是grep后面的参数,与并发没有关系

论坛徽章:
0
7 [报告]
发表于 2011-12-13 14:11 |只看该作者
回复 6# chenyx


现在有点搞不懂的地方就是:
如果单纯执行ps -ef的时候,输出一堆进程信息里面是没有grep abc这个进程的,但为什么执行 ps -ef |grep abc 之后,显示的结果却只有grep abc一条记录。
我的理解是ps -ef |grep abc这条组合匹配把ps -ef输出的一堆进程信息作为grep abc的输入并进行艾格,如果这一堆进程信息中没有包含abc的匹配行,输出结果应为空。但实际的输出结果是有一条grep abc的记录,那只能理解成为管道是并发的。执行ps -ef |grep abc的时候,grep abc这个进程信息与ps -ef的输出信息放在一起,然后再进行grep abc的匹配,得出一条匹配记录。如果按照这个理解,那么管道是并发的这个思想又与管道把 “|”之前的命令的输出作为“|”之后的命令的输入又不一致。我的困惑就在这了。

论坛徽章:
0
8 [报告]
发表于 2011-12-13 14:34 |只看该作者
你单纯执行ps -ef 的时候没有执行grep 命令,所以没有grep abc

管道把前一个命令的输出做为后一个命令的输入,这是对的。
但是,系统不会等前一个命令执行完了以后才去启动后一个命令。因为管道本质上就是一段内存缓冲区,一个进程写数据进去,另一个进程从其中读取数据。如果写进程把缓冲区写满了,读进程还没有从缓冲区中开始读数据,那么写进程就会挂在那里一直等,直到缓冲区的数据被取出来。管道被设计出来是为了在进程间交换数据,所以管道两端的进程同时存在没什么不对。

论坛徽章:
0
9 [报告]
发表于 2011-12-13 15:42 |只看该作者
回复 8# weichongli


非常感谢 weichongli 的讲解,谢谢!

另再请问下:我一直想找些关于linux机制的介绍(如内存管理、进程调度、dump、kexec、strace、管道等等),但很难找到从原理或机制上讲解的书箱,你能分享下你平常学习linux的一些经验和一些好的书箱么?

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
10 [报告]
发表于 2011-12-14 08:53 |只看该作者
ps -ef | grep ab[c]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP