check_java_running() 返回0或1判断java进程是否运行,get_java_pid() 获取pid支持单/多实例;推荐结合pid文件与kill -0验证提升健壮性。

在 Linux Shell 脚本中,封装一个检查 Java 进程的函数,核心目标是:**可复用、可判断、可定位**——即能统一调用、返回明确状态(运行中/未运行)、并可选输出 PID 或进程详情。不需要每次重复写 ps 或 jps 命令。
函数设计原则:聚焦实际用途
一个实用的检查函数应支持两种常见场景:
- 仅判断是否运行(用于
if条件判断,如启动前防重) - 获取具体 PID 或命令行(用于后续 kill、日志追踪等操作)
不建议把所有逻辑堆在一行;用函数封装后,脚本更清晰、不易出错。
基础版 check_java_running() —— 返回布尔状态
这个函数只做一件事:检查是否有匹配的 Java 进程,成功则返回 0(true),否则返回 1(false)。适合用在条件分支里:
(放在脚本开头或函数库文件中)check_java_running() {<br> local app_name="$1"<br> if [ -z "$app_name" ]; then<br> ps -ef | grep '[j]ava' | grep -q 'jar' 2>/dev/null<br> else<br> ps -ef | grep '[j]ava' | grep -q "$app_name" 2>/dev/null<br> fi<br>}
说明:
-
grep '[j]ava'避免匹配到自身grep进程(正则技巧) - 传入
app_name(如myapp.jar)时精准匹配;不传则默认查任意 Java 启动的 jar 进程 - 静默执行(
2>/dev/null),只靠退出码表达结果
使用示例:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
if check_java_running "api-server.jar"; then<br> echo "服务已在运行"<br>else<br> echo "准备启动..."<br> java -jar api-server.jar &<br>fi
增强版 get_java_pid() —— 获取 PID 并支持多实例处理
当需要精确控制某个 Java 应用(比如要 kill 或查日志),推荐返回 PID。该函数可返回第一个匹配 PID,或全部 PID(用空格分隔):
get_java_pid() {<br> local app_name="$1"<br> local all="$2" # 传入 "all" 则返回全部匹配 PID<br> if [ -z "$app_name" ]; then<br> if [ "$all" = "all" ]; then<br> ps -eo pid,cmd | grep '[j]ava' | grep -v grep | awk '{print $1}'<br> else<br> ps -eo pid,cmd | grep '[j]ava' | grep -v grep | head -n1 | awk '{print $1}'<br> fi<br> else<br> if [ "$all" = "all" ]; then<br> ps -eo pid,cmd | grep '[j]ava' | grep -F "$app_name" | grep -v grep | awk '{print $1}'<br> else<br> ps -eo pid,cmd | grep '[j]ava' | grep -F "$app_name" | grep -v grep | head -n1 | awk '{print $1}'<br> fi<br> fi<br>}
关键点:
- 用
ps -eo pid,cmd更可靠(不受终端宽度截断影响) -
grep -F按字面匹配,避免误触正则特殊字符 -
head -n1默认取首个,适合单实例部署;加"all"参数可适配多实例场景
配套建议:结合 PID 文件提升健壮性
纯 ps 查找有竞态风险(进程刚启就查、或刚停未清)。生产环境建议搭配 PID 文件使用:
- 启动时写入
echo $! > app.pid - 检查函数优先读
app.pid并验证进程是否存在:kill -0 $(cat app.pid) 2>/dev/null - 验证失败再 fallback 到 ps 查找,避免“假死 PID”干扰
这样既快又准,是运维脚本常用模式。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










