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(){
RuntimeMXBeanruntimeMXBean=ManagementFactory.getRuntimeMXBean();
System.out.println(runtimeMXBean.getName());
returnInteger.valueOf(runtimeMXBean.getName().split("@")[0])
.intValue();
}
}
运行结果:
2896@PC-20150603VRPL 2896
ManagementFactory是一个在运行时管理和监控JavaVM的工厂类,它能提供很多管理VM的静态接口,比RuntimeMXBean;
RuntimeMXBean是Java虚拟机的运行时管理接口.
当前进程ID为2896。
但这种让Java进程自行打印ID的方式并不太好用,因为很多时候我们是需要在不修改代码另一个Java程序代码的情况下知道这个正在运行着的Java进程的ID,如果你也有这个需求,可以看一下下面的解决方法:
获取所有正在运行着的Java进程
packagecom.test;
importjava.util.HashSet;
importjava.util.Set;
importsun.jvmstat.monitor.MonitoredHost;
importsun.jvmstat.monitor.MonitoredVm;
importsun.jvmstat.monitor.MonitoredVmUtil;
importsun.jvmstat.monitor.VmIdentifier;
publicclassProcessID{
publicstaticvoidmain(String[]args)throwsException{
//获取监控主机
MonitoredHostlocal=MonitoredHost.getMonitoredHost("localhost");
//取得所有在活动的虚拟机集合
Set>vmlist=newHashSet
运行结果:
2752------> 5172------>com.test.Target 5308------>com.test.ProcessID
这样,就可以根据类名找到进程号了。
MonitoredHost等类位于${JAVA_HOME}/lib/tools.jar
下面是一个可以直接根据类找到对应Java进程ID的方法:
packagecom.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{
publicstaticvoidmain(String[]args)throwsException{
intpid=getProcess(Target.class);
System.out.println("PID:"+pid);
}
publicstaticintgetProcess(Class>cls)throwsMonitorException,URISyntaxException{
if(cls==null){
return-1;
}
//获取监控主机
MonitoredHostlocal=MonitoredHost.getMonitoredHost("localhost");
//取得所有在活动的虚拟机集合
Set>vmlist=newHashSet
运行结果:
PID:5172
源码位于我的Github项目aoptracer的com.test包里
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。