Java jar命令如何正确终止运行?
- 主机动态
- 2025-05-28
- 8
当通过 java -jar 命令运行一个Java应用程序时,用户常会遇到需要主动退出的场景,不同的运行方式和环境会影响退出方法的选择,以下详细说明几种安全退出的方法及注意事项,帮助用户根据实际情况灵活操作。
直接退出交互式运行的程序
如果通过命令行直接启动JAR包(java -jar app.jar),程序会在当前终端中运行并占用交互界面,此时可通过以下方式退出:
-
使用快捷键
按下 Ctrl + C(Windows/Linux/macOS通用):
- 向程序发送 SIGINT 信号,触发优雅终止。
- 如果程序监听了该信号,会执行资源清理(如关闭数据库连接、保存临时文件)后退出。
-
输入关闭命令(如果程序支持)
部分Java程序(如Spring Boot应用)内置了关闭指令,在运行中的Spring Boot终端输入:
curl -X POST localhost:端口号/actuator/shutdown
需确保程序已启用Actuator端点并配置了权限。
结束后台运行的Java进程
若程序是通过 nohup 或 & 在后台运行(nohup java -jar app.jar &),需通过进程管理命令终止。
方法1:通过进程ID(PID)终止
-
查找进程ID

或
-
终止进程
- 普通终止(允许程序回收资源): kill <PID> # Linux/macOS taskkill /PID <PID> # Windows
- 强制终止(立即结束,可能导致数据丢失): kill -9 <PID> # Linux/macOS taskkill /F /PID <PID> # Windows
-
监听控制台输入
输入exit后调用System.exit(0):
Scanner scanner = new Scanner(System.in); while (true) { String input = scanner.nextLine(); if ("exit".equalsIgnoreCase(input)) { System.exit(0); // 0表示正常退出 } }
-
响应系统信号
注册Shutdown Hook实现安全退出:
Runtime.getRuntime().addShutdownHook(new Thread(() -> { System.out.println("执行清理操作..."); })); -
数据安全
- 优先使用Ctrl + C或普通kill命令,避免强制终止导致数据损坏。
- 后台程序建议通过PID终止而非直接关闭终端。
-
信号差异
| 信号 | 效果 | 适用场景 |
|———|———————–|————————|
| SIGINT | 优雅退出(Ctrl+C) | 交互式程序 |
| SIGTERM | 请求终止(默认kill) | 后台进程 |
| SIGKILL | 强制终止(kill -9) | 程序无响应时最后手段 |
-
工具推荐
- jps:JDK自带工具,快速查看Java进程ID。
- htop(Linux):图形化进程管理工具。
- Java官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
- Linux信号列表:https://man7.org/linux/man-pages/man7/signal.7.html
- Spring Boot Actuator:https://spring.io/guides/gs/actuator-service/
退出java -jar命令的核心在于根据程序运行环境选择合适的方式,对于普通用户,推荐优先使用Ctrl + C或查找PID后终止;开发者则应通过代码逻辑实现可控退出,无论哪种场景,都需确保程序资源正确释放,避免异常中断。
引用说明
方法2:使用进程名批量终止
pkill -f app.jar # Linux/macOS(匹配包含app.jar的进程)
通过程序内部逻辑退出
开发者可以在代码中预设退出机制:
注意事项