$ ps ax | grep 6557
#=> 6582 s003 S+ 0:00.01 grep 6557
Run Code Online (Sandbox Code Playgroud)
但是用活动监视器快速检查,没有进程的 pid 为 6557。而且网上的一切都说 grep 在没有匹配时应该返回 0。
这是比赛:
$ ps ax | grep 6557
6582 s003 S+ 0:00.01 grep 6557
^^^^ (found it!)
Run Code Online (Sandbox Code Playgroud)
grep正在检查行中的所有内容,包括命令和参数,并且6557是您提供的参数grep,因此它会找到自己的进程。
更严格的正则表达式可以解决这种特殊情况: ^指示行的开头,并\ \*匹配任意数量的前导空格,因此只会在行的开头找到匹配项:
$ ps ax | grep ^\ \*6557
Run Code Online (Sandbox Code Playgroud)