如何获取我的 Java 进程的 ID?
我知道有几个依赖于平台的黑客,但我更喜欢更通用的解决方案。
不存在可以保证在所有 jvm 实现中工作的独立于平台的方式。 ManagementFactory.getRuntimeMXBean().getName()看起来是最好的(最接近的)解决方案,通常包括 PID。它很短,并且 可能 适用于广泛使用的每个实现。
ManagementFactory.getRuntimeMXBean().getName()
在 linux+windows 上,它返回一个值,例如"12345@hostname"(12345作为进程 ID)。请注意,尽管根据文档,对此值没有任何保证:
"12345@hostname"
12345
返回代表正在运行的 Java 虚拟机的名称。返回的名称字符串可以是任意字符串,Java 虚拟机实现可以选择在返回的名称字符串中嵌入特定于平台的有用信息。每个正在运行的虚拟机可以有不同的名称。
在 Java 9 中,可以使用新的流程 API :
long pid = ProcessHandle.current().pid();