什么情况下 ps -ef f | grep "xxx" 不能正常执行?
管道两侧的命令是同时执行的,并不是先执行前面一个,执行完毕后把输出交给后面的命令,所以ps的结果包含 grep "a.php"这条命令,这个命令本身就包含了a.php这个字符串
所以即使没有a.php这个进程,你通过grep依然可以执行成功,进一步说,ps之后grep任何普通字符串都可以成功
xelz@ubuntu: ~ [12:01:40]
$ ps -ef | grep any_thing_you_want ; echo $?
xelz 30076 29945 0 12:04 pts/0 00:00:00 grep --color=auto any_thing_you_want
0
解决办法
你可以再grep一次,过滤掉 grep命令本身
ps -ef f | grep 'a.php' | grep -v grep
还有一种trick的方式是使用bracket expression,类似正则表达式的[]
ps -ef f | grep [a].php
[a]表示括号里面的字符任选其一,这里其实就是代表a,也就是grep a.php,但是实际上ps命令获得的grep命令参数是 grep [a].php,并不包含a.php这样一个字符串,可以避免grep命令自身被ps捕捉到
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。