diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/rtkcluster/RtkClusterService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/rtkcluster/RtkClusterService.java index e9b67ac9..4f3492d8 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/rtkcluster/RtkClusterService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/rtkcluster/RtkClusterService.java @@ -132,7 +132,8 @@ public class RtkClusterService implements ApplicationRunner { if (sid != null) { RtkrcvSession upd = new RtkrcvSession(); upd.setSessionId(sid); - upd.setPid((int) p.pid()); + Integer pid = tryGetPidCompat(p); + if (pid != null) upd.setPid(pid); upd.setStartTime(LocalDateTime.now()); upd.setUpdatedAt(LocalDateTime.now()); sessionMapper.updateById(upd); @@ -212,6 +213,18 @@ public class RtkClusterService implements ApplicationRunner { } } + // Java 8-only attempt to get Process pid; returns null if unavailable + private Integer tryGetPidCompat(Process p) { + try { + // Access private 'pid' field on UNIXProcess (Java 8) + java.lang.reflect.Field f = p.getClass().getDeclaredField("pid"); + f.setAccessible(true); + Object v = f.get(p); + if (v instanceof Integer) return (Integer) v; + } catch (Exception ignore) {} + return null; + } + static class DeviceEndpoint { private final String deviceId; private final int port;