提交 38c5e3c3 authored 作者: 吕本才's avatar 吕本才

refactor(ProcessUtil): 简化进程PID获取逻辑,适配docker JDK11环境

移除了冗余的NoSuchMethodError降级分支,统一使用反射获取进程PID,适配当前线上docker环境的JDK11版本,精简代码逻辑
上级 97280e3a
...@@ -70,28 +70,13 @@ public class ProcessUtil { ...@@ -70,28 +70,13 @@ public class ProcessUtil {
// Java 9+ 推荐方式:ProcessHandle API // Java 9+ 推荐方式:ProcessHandle API
pid = ((ProcessHandle) process).pid(); pid = ((ProcessHandle) process).pid();
} else { } else {
// JDK 9+ 降级方案:使用实际进程类反射获取 pid // 目前服务器上的docker JDK 11 方案:使用实际进程类反射获取 pid
Class<?> clazz = process.getClass(); Class<?> clazz = process.getClass();
Field declaredField = clazz.getDeclaredField("pid"); Field declaredField = clazz.getDeclaredField("pid");
declaredField.setAccessible(true); declaredField.setAccessible(true);
pid = declaredField.getLong(process); pid = declaredField.getLong(process);
} }
} catch (Throwable e) {
} catch (NoSuchMethodError e) {
// 降级走 JDK 8 反射逻辑
try {
Class<?> clazz = Class.forName("java.lang.UNIXProcess");
Field declaredField = clazz.getDeclaredField("pid");
declaredField.setAccessible(true);
pid = declaredField.getInt(process);
} catch (Exception ex) {
// 最终容错,返回-1不中断任务
pid = -1;
logger.error("get process id for unix error {0}", e);
// throw new UnsupportedOperationException("不支持当前JDK的进程ID获取");
}
} catch (Throwable e) {
logger.error("get process id for unix error ", e); logger.error("get process id for unix error ", e);
throw new UnsupportedOperationException("不支持当前JDK的进程ID获取"); throw new UnsupportedOperationException("不支持当前JDK的进程ID获取");
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论