unix - ps –ef|grep java 和 ps –ef|grep *.java 的区别

标签 unix grep

我试图在 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/

相关文章:

c - 如何将字符串转换为 int64_t?

unix - 在 FFmpeg 中启用 rtmp_swfurl 选项

linux - 在 linux 中使用带有 find 命令的管道

c - 如何在线程/进程之间可移植地共享变量?

linux - grep 返回“字符之间的字符串

linux - 用于从文本日志文件中 Grepping/检索值的 Shell 脚本(sqlcode 字段值)

bash - 如何grep字符的精确十六进制值

Linux/Unix : script starting some command if some directory tree exists

regex - 如何匹配单行字符串上最后一次出现的模式

linux - Bash,Linux,需要根据另一个文件中的匹配内容从一个文件中删除行