我在用
ps -ef | grep java | wc -l
找出在任何给定时间运行的java进程的数量。
上面的命令显然也会在结果中统计“ps -ef | grep java”命令。
为了避免这个,我发现我可以使用
ps -ef | grep [j]ava | wc -l
它工作正常。 不过,我想弄清楚为什么能从结果中跳过原来的命令。
因为当你为[j] ava grep时,这个过程被命名为'grep [j] ava'。 '[j] ava'与正则expression式'[j] ava'不匹配,因此不会显示在结果中。
当你这样做:
ps -ef | grep [j]ava | wc -l
你正在使用模式[j]ava ,匹配方括号(只包含单个字母j )之间的任何单个字符,紧接着是字符ava 。 grep进程本身不包含字母j后面紧接着的字母ava ,而是包含方括号,然后是j ,然后是方括号,然后是ava 。
也就是说,模式本身不匹配。
这不完全是你的问题的答案,但…
完成同样事情的另一个常见方法是:
ps -ef|grep java|grep -v grep|wc -l
这当然是通过对grep这个术语本身进行反转来实现的
您已经更改了grep进程的名称,以便它不再包含术语“java”
为了配合其他答案,希望有助于澄清:
grep java匹配任何内部有java的东西。
grep java
java的
grep [j] ava明确地匹配“java”:
grep [j] ava < – 这里没有string“java”,所以它不匹配
java的
使用pgrep命令?
从JDK 1.5开始,你有jps(linux / usr / lib / jvm / java-6-sun / bin / jps)。 你可以在所有的操作系统上使用它(linux,windows,solaris)