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包里
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。