应优先用 kill -15(SIGTERM)优雅终止Java进程,触发shutdown hooks清理资源;若5–10秒后仍存活且确认卡死,再用 kill -9(SIGKILL)强制结束,避免数据不一致。

直接用 kill -9 能结束无响应的 Java 进程,但不是首选方式。真正稳妥的做法是先尝试优雅终止,失败后再强制结束——这能避免文件未关闭、数据库连接泄漏、事务中断等风险。
先查出目标 Java 进程 PID
用 ps 配合 grep 定位进程,注意过滤掉 grep 自身:
ps -ef | grep 'java.*Test\.jar' | grep -v grep- 如果 jar 名含空格或特殊字符,建议加单引号并用完整路径匹配,比如:
ps -ef | grep 'java.*\/opt\/app\/service.jar' - 更精准的方式是用
pgrep -f:pgrep -f 'Test\.jar',它只输出 PID,省去 awk 提取步骤
优先发送 SIGTERM(-15)让 Java 主动退出
SIGTERM 是默认信号,Java 进程收到后会触发 shutdown hooks,执行预设的清理逻辑(如关闭数据库连接、保存处理进度、移动临时文件等):
-
kill 2095020809(不带参数即等价于kill -15) - 等待几秒,再用
ps -p 2095020809检查是否已退出 - 若程序有自定义 shutdown hook,此时会被调用;没有的话,JVM 也会执行基本资源回收
确认无响应后再用 SIGKILL(-9)强制终止
只有在 SIGTERM 发送后 5–10 秒仍存活,且确定进程卡死(比如 CPU 占用为 0、无日志输出、strace -p 显示阻塞在系统调用),才升级到 -9:
立即学习“Java免费学习笔记(深入)”;
kill -9 2095020809- 该信号无法被 Java 捕获或忽略,内核立即回收进程所有资源(内存、fd、socket 等)
- ⚠️ 注意:-9 不触发任何 Java 层回调,可能导致数据不一致或残留临时文件
批量终止多个 Java 进程的实用写法
避免手动一个一个 kill,可用管道组合快速处理(仍建议先试 -15):
- 安全批量发 SIGTERM:
ps -ef | grep 'MyApp\.jar' | grep -v grep | awk '{print $2}' | xargs kill - 强制批量终止(慎用):
ps -ef | grep 'MyApp\.jar' | grep -v grep | awk '{print $2}' | xargs kill -9 - 更健壮的替代:用
pkill -f 'MyApp\.jar'或killall -u $USER java(需确认影响范围)


















