Java获取当前进程ID以及所有Java进程的进程ID
首先是获取当前Java运行的Java进程ID,这个是网上常见的,也就是Java程序自身将进程ID打印出来:
packagecom.test;importjava.lang.management.ManagementFactory;importjava.lang.management.RuntimeMXBean;publicclassTarget{publicstaticvoidmain(String[] args)throwsInterruptedException{ System.out.println(getProcessID());while(true) { Thread.sleep(10000); } }publicstaticfinalintgetProcessID(){ RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); System.out.println(runtimeMXBean.getName());returnInteger.valueOf(runtimeMXBean.getName().split("@")[0]) .intValue(); } }
ManagementFactory 是一个在运行时管理和监控Java VM的工厂类,它能提供很多管理VM的静态接口,比如 RuntimeMXBean ;
RuntimeMXBean 是Java虚拟机的运行时管理接口.
获取所有正在运行着的Java进程
package com.test;importjava.util.HashSet;importjava.util.Set;importsun.jvmstat.monitor.MonitoredHost;importsun.jvmstat.monitor.MonitoredVm;importsun.jvmstat.monitor.MonitoredVmUtil;importsun.jvmstat.monitor.VmIdentifier;publicclassProcessID{publicstaticvoid main(String[] args)throwsException{// 获取监控主机MonitoredHostlocal =MonitoredHost.getMonitoredHost("localhost");// 取得所有在活动的虚拟机集合Set vmlist = newHashSet(local.activeVms());// 遍历集合,输出PID和进程名for(Objectprocess : vmlist) {MonitoredVmvm = local.getMonitoredVm(newVmIdentifier("//"+ process));// 获取类名Stringprocessname =MonitoredVmUtil.mainClass(vm,true);System.out.println(process +" ------> "+ processname); } }}
MonitoredHost等类位于${JAVA_HOME}/lib/tools.jar
_
运行结果:
2752------> 5172------>com.test.Target5308------>com.test.ProcessID
直接根据类找到对应Java进程ID的方法
package com.test;importjava.net.URISyntaxException;importjava.util.HashSet;importjava.util.Set;importsun.jvmstat.monitor.MonitorException;importsun.jvmstat.monitor.MonitoredHost;importsun.jvmstat.monitor.MonitoredVm;importsun.jvmstat.monitor.MonitoredVmUtil;importsun.jvmstat.monitor.VmIdentifier;publicclassProcessID{publicstaticvoid main(String[] args)throwsException{ int pid = getProcess(Target.class);System.out.println("PID: "+pid); }publicstaticint getProcess(Class cls)throwsMonitorException,URISyntaxException{if(cls == null) {return-1; }// 获取监控主机MonitoredHostlocal =MonitoredHost.getMonitoredHost("localhost");// 取得所有在活动的虚拟机集合Set vmlist = newHashSet(local.activeVms());// 遍历集合,输出PID和进程名for(Objectprocess : vmlist) {MonitoredVmvm = local.getMonitoredVm(newVmIdentifier("//"+ process));// 获取类名Stringprocessname =MonitoredVmUtil.mainClass(vm,true);if(cls.getName().equals(processname)) {return((Integer)process).intValue(); } }return-1; }}
根据类名称找到对应Java进程ID的方法
packagecom.example.demo;importsun.jvmstat.monitor.*;importjava.net.URISyntaxException;importjava.util.HashSet;importjava.util.Set;publicclassProcessID2{publicstaticvoidmain(String[] args)throwsException{intpid = getProcess("cn.usr.demo.DemoApplication"); System.out.println("PID: "+ pid); }publicstaticintgetProcess(String cls)throwsMonitorException, URISyntaxException{if(cls ==null) {return-1; }// 获取监控主机MonitoredHost local = MonitoredHost.getMonitoredHost("localhost");// 取得所有在活动的虚拟机集合Set vmlist =newHashSet(local.activeVms());// 遍历集合,输出PID和进程名for(Object process : vmlist) { MonitoredVm vm = local.getMonitoredVm(newVmIdentifier("//"+ process));// 获取类名String processname = MonitoredVmUtil.mainClass(vm,true);if(cls.equals(processname)) {return((Integer) process).intValue(); } }return-1; }}
进群:697699179可以获取Java、大数据各类入门学习资料!
这是我的微信公众号【编程study】各位大佬有空可以关注下,每天更新Java、大数据学习方法,感谢!
学习中遇到问题有不明白的地方,推荐加小编Java|大数据学习群:697699179内有视频教程 ,直播课程 ,等学习资料,期待你的加入