JDK 10:从Java访问Java应用程序的进程ID

StackOverflow.com上一个普遍的问题是:“ Java程序如何获得自己的进程ID? 与该问题相关的几个答案包括解析ManagementFactory返回的StringgetRuntimeMXBean()getName() [但是可以提供“任意字符串”],使用ProcessHandlegetPid() [ JEP 102 ],使用Java Native Access (JNA),使用系统信息收集和报告程序 (SIGAR),使用JavaSysMon ,使用Java Native Runtime – POSIX ,通过调用Runtime解析jps (或jcmd )的结果。 getRuntime()exec(String)和其他方法。 JDK 10可能引入了最简单的方法,即通过RuntimeMXBean上的新方法来获取JVM进程的PID。

JDK-8189091 (“ MBean对PID的访问”)引入了RuntimeMXBean方法getPid ()作为JDK 10默认接口方法 。 该问题将“问题”表示为:“平台MBean不提供任何API来获取正在运行的JVM的进程ID。 一些JMX工具依赖于RuntimeMXBean :: getName的热点实现,该实现返回<pid> @ <主机名>。” 该问题还提供了“解决方案”:“引入了新的API java.lang.management.RuntimeMXBean.getPid ,以便JMX工具可以直接获取进程ID,而不必依赖于实现细节RuntimeMXBean#getName().split("@")[0] 。”

下一个代码清单是一个简单的清单,它演示了如何在RuntimeMXBean上使用此新的RuntimeMXBean getPid()方法。

使用JDK 10的RuntimeMXBean.getPid()

final RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
final long pid = runtime.getPid();
final Console console = System.console();
out.println("Process ID is '" + pid + "' Press <ENTER> to continue.");
console.readLine();

当上面的代码包含在可执行的main(String[])函数中并且从命令行执行该函数时,输出如下一个屏幕快照所示(该屏幕快照还包括用于验证PID是否正确的单独终端)通过jcmd)。

进程ID的long ,因此无需解析“任意字符串”。 这种方法也不需要第三方库或复杂的代码来确定当前Java进程的标识符。

这篇文章简要介绍了Java应用程序(用JDK 10或更高版本编写)确定自己的基础进程ID的最简单方法。

翻译自: https://www.javacodegeeks.com/2018/02/jdk-10-accessing-java-applications-process-id-java.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值