如何获取我的 Java 进程的 ID?
我知道有几个平台相关的黑客,但我更喜欢更通用的解决方案。
原文由 Dmitry Shechtman 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何获取我的 Java 进程的 ID?
我知道有几个平台相关的黑客,但我更喜欢更通用的解决方案。
原文由 Dmitry Shechtman 发布,翻译遵循 CC BY-SA 4.0 许可协议
你可以使用 JNA 。不幸的是,还没有通用的 JNA API 来获取当前进程 ID,但是每个平台都非常简单:
确保你有 jna-platform.jar
然后:
int pid = Kernel32.INSTANCE.GetCurrentProcessId();
宣布:
private interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary) Native.loadLibrary("c", CLibrary.class);
int getpid ();
}
然后:
int pid = CLibrary.INSTANCE.getpid();
在 Java 9 下,新的 进程 API 可用于获取当前进程 ID。首先获取当前进程的句柄,然后查询 PID:
long pid = ProcessHandle.current().pid();
原文由 Luke Quinane 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答749 阅读✓ 已解决
2 回答1.8k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
不存在可以保证在所有 jvm 实现中工作的独立于平台的方法。
ManagementFactory.getRuntimeMXBean().getName()
看起来是最好(最接近)的解决方案,通常包括 PID。它很短,并且 可能 适用于广泛使用的每个实现。在 linux+windows 上,它返回一个类似
"12345@hostname"
的值(12345
是进程 ID)。请注意, 根据文档,不能保证此值:在 Java 9 中,可以使用新的 进程 API :