推荐用 pgrep -f "myapp.jar" 获取 java 进程 pid,它按完整命令行匹配且不产生 grep 自身进程;若用 ps,则需 ps -ef | grep "myapp.jar" | grep -v grep | awk '{print $2}' 提取 pid,并注意 jar 名唯一性及生产环境先确认。

直接用 ps 配合 grep 查 Java 进程 PID 容易误匹配(比如 grep 自身进程、或 jar 名含相似字符串),关键是要过滤掉 grep 进程本身,并准确定位到目标 Jar 包的启动进程。
用 ps -ef | grep 时排除 grep 自身进程
常见写法:ps -ef | grep "myapp.jar" | grep -v grep。其中 grep -v grep 是为了剔除 grep myapp.jar 这条命令自身产生的行,避免干扰 PID 提取。
-
ps -ef列出所有进程的完整信息(包括 UID、PID、PPID、启动命令等) -
grep "myapp.jar"筛出命令行中含该 jar 名的进程(注意路径或参数中可能带 jar 名) -
grep -v grep排除掉 grep 命令那一行,只保留真实 Java 进程
更可靠:用 pgrep 或 pidof 替代管道组合
如果系统支持,pgrep 更简洁安全:pgrep -f "myapp.jar"。它默认按完整命令行匹配,且不产生额外 grep 进程,天然规避误匹配问题。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
-f表示匹配整个命令行(不只是进程名),适合查 java -jar xxx.jar 这类启动方式 - 若 jar 名有特殊字符(如点、斜杠),建议加引号或转义,例如
pgrep -f "myapp\.jar" -
pidof一般只认进程名(如 java),不适用于 jar 包名,所以不推荐用于精准 jar 检索
提取 PID 后可直接用于 kill 或监控
拿到 PID 后,常用于快速终止或查看资源占用。可用 awk 直接取第一列(PID):
ps -ef | grep "myapp.jar" | grep -v grep | awk '{print $2}'- 或者一步到位杀进程:
kill $(ps -ef | grep "myapp.jar" | grep -v grep | awk '{print $2}') - 注意:确保 jar 名唯一,避免多个同名 jar 导致误杀;生产环境建议先
ps确认再操作
进阶技巧:区分不同 jar 启动的 JVM 实例
当多个 jar 使用相同 java 命令启动时,仅靠 jar 名可能不够。可在启动时加唯一 JVM 参数辅助识别,比如:java -Dapp.name=myapp -jar myapp.jar,然后用:ps -ef | grep "myapp.jar" | grep "app.name=myapp" 精准定位。
- 利用
-D系统属性、-Xmx内存参数、或自定义日志路径作为辅助标识 - 配合
lsof -i :端口反查 PID(如果知道应用监听端口)也是常用兜底方式
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










