When we are running on Java 9 we should be able to use ProcessHandle.current() to avoid using JNA. This would be more compatible across platforms; for example, the following has been reported on a SAP JVM:
java.lang.UnsatisfiedLinkError: /tmp/jna-…/jna….tmp: /tmp/jna-…/jna….tmp: failed to map segment from shared object: Operation not permitted
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2045)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1928)
at java.lang.Runtime.load0(Runtime.java:809)
at java.lang.System.load(System.java:1094)
at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:851)
at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:826)
at com.sun.jna.Native.<clinit>(Native.java:140)
at com.sun.akuma.CLibrary.<clinit>(CLibrary.java:89)
at com.sun.akuma.JavaVMArguments.resolvePID(JavaVMArguments.java:128)
at com.sun.akuma.JavaVMArguments.ofLinux(JavaVMArguments.java:116)
at com.sun.akuma.JavaVMArguments.of(JavaVMArguments.java:104)
at com.sun.akuma.JavaVMArguments.current(JavaVMArguments.java:92)
at jenkins.slaves.restarter.UnixSlaveRestarter.canWork(UnixSlaveRestarter.java:29)
When we are running on Java 9 we should be able to use
ProcessHandle.current()
to avoid using JNA. This would be more compatible across platforms; for example, the following has been reported on a SAP JVM:(Also cf. #14.)