开发者社区> 问答> 正文

什么情况下 ps -ef f | grep "xxx" 不能正常执行?

什么情况下 ps -ef f | grep "xxx" 不能正常执行?

展开
收起
我的中国 2017-11-30 18:47:20 2184 0
1 条回答
写回答
取消 提交回答
  • R&S网络资深工程师 ,阿里云论坛官方版主,阿里云云计算ACP,春考教学网站长,IT技术晋级之路专辑作者

    管道两侧的命令是同时执行的,并不是先执行前面一个,执行完毕后把输出交给后面的命令,所以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捕捉到

    2019-07-17 21:46:45
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载