我试图在 unix 框中找到所有正在运行的 java 进程。我很困惑
ps –ef|grep java
和
ps –ef|grep *.java
哪一个是正确的,确切的区别是什么?
PS:两者都返回不同的结果集
ps –ef|grep *.java
的输出ps -ef | grep *.java
aaassa1 7507 2304 0 11:49 pts/4 00:00:00 grep *.java
最佳答案
grep
只是文本匹配,它不知道进程名称或文件名等。
也就是说,如果您有一个名为 likejava.py
的 Python 脚本,结果也会如此。
回到你的问题,你的*.java
不好,因为 grep 使用正则表达式,而不是 glob 模式。
你可以试试:ps -ef|grep $(which java)
这将列出 java 进程,但仅适用于您的默认 java 安装。如果您安装了多个 Java,例如你的 Jboss 用 java7,tomcat 用 java6,eclipse 用 java5,这将失败。
还有一个工具叫 pgrep
.你可以试一试,例如
pgrep -l java
你可以做
man pgrep
获取更多信息:pgrep, pkill - look up or signal processes based on name and other attributes
编辑 加个小 ps..|grep 技巧
刚刚在问题中看到了您的输出:
您有
grep *.java
在输出中,这是一个很好的例子。 grep *.java
不是java进程,但它有文本“java”。所以它在那里。您可以通过
ps...|grep [j]ava
避免它适用于 bash。
关于unix - ps –ef|grep java 和 ps –ef|grep *.java 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15413539/