Java获取当前进程ID以及所有Java进程的进程ID

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内有视频教程 ,直播课程 ,等学习资料,期待你的加入

你可能感兴趣的:(Java获取当前进程ID以及所有Java进程的进程ID)