Cet article présente principalement comment Java obtient l'ID de processus actuel et l'ID de processus de tous les processus Java. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer
La première consiste à obtenir le Java en cours d'exécution. ID de processus Java, ceci est courant sur Internet, c'est-à-dire que le programme Java lui-même imprime l'ID de processus :
package com.test; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; public class Target { public static void main(String[] args) throws InterruptedException { System.out.println(getProcessID()); while(true) { Thread.sleep(10000); } } public static final int getProcessID() { RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); System.out.println(runtimeMXBean.getName()); return Integer.valueOf(runtimeMXBean.getName().split("@")[0]) .intValue(); } }
Résultats d'exécution :
2896@PC-20150603VRPL 2896
ManagementFactory est une gestion d'exécution Et la classe d'usine pour surveiller les VM Java, elle peut fournir de nombreuses interfaces statiques pour la gestion des VM, qui sont meilleures que RuntimeMXBean
RuntimeMXBean est l'interface de gestion d'exécution de ; Machine virtuelle Java
L'ID de processus actuel est 2896.
Mais cette façon de laisser le processus Java imprimer l'ID par lui-même n'est pas facile à utiliser, car nous avons souvent besoin de connaître le processus Java en cours d'exécution sans modifier le code d'un autre programme Java, si vous le souhaitez également. avez ce besoin, vous pouvez jeter un oeil à la solution suivante :
Obtenir tous les processus Java en cours d'exécution
package com.test; import java.util.HashSet; import java.util.Set; import sun.jvmstat.monitor.MonitoredHost; import sun.jvmstat.monitor.MonitoredVm; import sun.jvmstat.monitor.MonitoredVmUtil; import sun.jvmstat.monitor.VmIdentifier; public class ProcessID { public static void main(String[] args) throws Exception { // 获取监控主机 MonitoredHost local = MonitoredHost.getMonitoredHost("localhost"); // 取得所有在活动的虚拟机集合 Set<?> vmlist = new HashSet<Object>(local.activeVms()); // 遍历集合,输出PID和进程名 for(Object process : vmlist) { MonitoredVm vm = local.getMonitoredVm(new VmIdentifier("//" + process)); // 获取类名 String processname = MonitoredVmUtil.mainClass(vm, true); System.out.println(process + " ------> " + processname); } } }
Résultats en cours d'exécution :
2752 ------> 5172 ------> com.test.Target 5308 ------> com.test.ProcessID
De cette façon, vous pouvez trouver le numéro de processus en fonction du nom de la classe.
MonitoredHost et d'autres classes se trouvent dans ${JAVA_HOME}/lib/tools.jar
Ce qui suit est une méthode qui peut trouver directement l'ID de processus Java correspondant en fonction de la classe :
package com.test; import java.net.URISyntaxException; import java.util.HashSet; import java.util.Set; import sun.jvmstat.monitor.MonitorException; import sun.jvmstat.monitor.MonitoredHost; import sun.jvmstat.monitor.MonitoredVm; import sun.jvmstat.monitor.MonitoredVmUtil; import sun.jvmstat.monitor.VmIdentifier; public class ProcessID { public static void main(String[] args) throws Exception { int pid = getProcess(Target.class); System.out.println("PID: "+pid); } public static int getProcess(Class<?> cls) throws MonitorException, URISyntaxException { if(cls == null) { return -1; } // 获取监控主机 MonitoredHost local = MonitoredHost.getMonitoredHost("localhost"); // 取得所有在活动的虚拟机集合 Set<?> vmlist = new HashSet<Object>(local.activeVms()); // 遍历集合,输出PID和进程名 for(Object process : vmlist) { MonitoredVm vm = local.getMonitoredVm(new VmIdentifier("//" + process)); // 获取类名 String processname = MonitoredVmUtil.mainClass(vm, true); if(cls.getName().equals(processname)) { return ((Integer)process).intValue(); } } return -1; } }
Résultat d'exécution :
PID : 5172
Le code source se trouve dans le package com.test de mon projet hub Git aoptraceur
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!