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

新手上路,请多包涵

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

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

原文由 Dmitry Shechtman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 846
2 个回答

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

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

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

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

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

原文由 Wouter Coekaerts 发布,翻译遵循 CC BY-SA 4.0 许可协议

你可以使用 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();

原文由 Luke Quinane 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏