如何不依赖Java9跨平台获取运行中Java应用自身的PID?
跨平台获取Java进程PID(Java 9以下兼容方案)
方案1:无第三方依赖实现(推荐,Java 6+全平台支持)
该方案基于JDK自带的
java.lang.managementAPI,Java 5及以上版本原生支持,无需引入任何额外依赖,适配Windows、Linux、macOS全平台,主流JVM(HotSpot、OpenJDK、Oracle JDK、IBM J9等)均兼容。
import java.io.FileWriter; import java.io.IOException; import java.lang.management.ManagementFactory; class MyApp { public static void main(String[] args) { // 获取PID String runtimeName = ManagementFactory.getRuntimeMXBean().getName(); long pid = Long.parseLong(runtimeName.split("@")[0]); // 保存PID到文件,可自行替换为实际需要的文件路径 String pidFilePath = "./myapp.pid"; try (FileWriter writer = new FileWriter(pidFilePath)) { writer.write(String.valueOf(pid)); System.out.println("PID已写入文件: " + pidFilePath + ", PID值为: " + pid); } catch (IOException e) { e.printStackTrace(); } // 原有业务逻辑 // Do stuff } }
注意:极少数小众JVM可能不遵循PID@主机名的返回格式,若生产环境使用非常见JVM,可选用方案2。
方案2:JNA实现(100%兼容所有JVM,需第三方依赖)
如果需要完全规避字符串解析的风险,可以使用JNA(Java Native Access)库的API直接获取PID,跨平台适配逻辑由JNA底层实现:
首先在Maven的pom.xml中引入依赖:
<dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna-platform</artifactId> <version>5.13.0</version> </dependency>
代码示例:
import com.sun.jna.Platform; import java.io.FileWriter; import java.io.IOException; class MyApp { public static void main(String[] args) { // 直接获取PID long pid = Platform.getPID(); // 保存到文件 String pidFilePath = "./myapp.pid"; try (FileWriter writer = new FileWriter(pidFilePath)) { writer.write(String.valueOf(pid)); } catch (IOException e) { e.printStackTrace(); } // 原有业务逻辑 // Do stuff } }
内容的提问来源于stack exchange,提问作者user5123481566
相关产品推荐
相关产品推荐

