Java 程序如何获取自己的进程 ID?Java 9

2022-08-31 04:39:20

如何获取我的 Java 进程的 ID?

我知道有几个依赖于平台的黑客,但我更喜欢更通用的解决方案。


答案 1

不存在可以保证在所有 jvm 实现中都能正常工作的独立于平台的方式。 看起来是最佳(最接近)的解决方案,通常包括 PID。它很短,并且可能适用于广泛使用的每个实现。ManagementFactory.getRuntimeMXBean().getName()

在 linux+windows 上,它返回一个类似 ( 进程 id) 的值。但请注意,根据文档,无法保证此值:"12345@hostname"12345

返回表示正在运行的 Java 虚拟机的名称。返回的名称字符串可以是任意字符串,Java 虚拟机实现可以选择在返回的名称字符串中嵌入特定于平台的有用信息。每个正在运行的虚拟机可以有不同的名称。

在Java 9中,可以使用新的进程API

long pid = ProcessHandle.current().pid();

答案 2

你可以使用JNA。不幸的是,还没有通用的JNA API来获取当前的进程ID,但每个平台都非常简单:

窗户

确保你有:jna-platform.jar

int pid = Kernel32.INSTANCE.GetCurrentProcessId();

Unix

宣:

private interface CLibrary extends Library {
    CLibrary INSTANCE = (CLibrary) Native.loadLibrary("c", CLibrary.class);   
    int getpid ();
}

然后:

int pid = CLibrary.INSTANCE.getpid();

Java 9

在 Java 9 下,新的进程 API 可用于获取当前进程 ID。首先获取当前进程的句柄,然后查询 PID:

long pid = ProcessHandle.current().pid();

推荐