提交 97280e3a authored 作者: 吕本才's avatar 吕本才

fix(ProcessUtil): 优化跨平台进程PID获取逻辑

1. 添加JDK版本日志打印辅助调试 2. 修复UNIX进程PID获取的类型转换错误 3. 简化反射获取PID的逻辑,移除冗余代码 4. 调整代码格式优化可读性
上级 25fe27c4
......@@ -30,6 +30,7 @@ public class ProcessUtil {
public static String getProcessId(Process process) {
long pid = -1;
Field field;
if (Platform.isWindows()) {
try {
field = process.getClass().getDeclaredField("handle");
......@@ -39,6 +40,12 @@ public class ProcessUtil {
logger.error("get process id for windows error {0}", ex);
}
} else if (Platform.isLinux() || Platform.isAIX()) {
// 方式一:系统属性
logger.info("JDK Version: {}", System.getProperty("java.version"));
// 方式二:Runtime.version() (Java 9+)
logger.info("JDK Version2: {}", Runtime.version());
try {
// Class<?> clazz = Class.forName("java.lang.UNIXProcess");
// field = clazz.getDeclaredField("pid");
......@@ -63,13 +70,11 @@ public class ProcessUtil {
// Java 9+ 推荐方式:ProcessHandle API
pid = ((ProcessHandle) process).pid();
} else {
logger.error("jdk8 换方法执行");
Class<?> clazz = Class.forName("java.lang.UNIXProcess");
// JDK 9+ 降级方案:使用实际进程类反射获取 pid
Class<?> clazz = process.getClass();
Field declaredField = clazz.getDeclaredField("pid");
declaredField.setAccessible(true);
pid = declaredField.getInt(process);
// throw new UnsupportedOperationException("不支持当前JDK的进程ID获取");
pid = declaredField.getLong(process);
}
} catch (NoSuchMethodError e) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论