Heim  >  Artikel  >  Java  >  Wie erhält Java die aktuelle Prozess-ID und die Prozess-IDs aller Java-Prozesse?

Wie erhält Java die aktuelle Prozess-ID und die Prozess-IDs aller Java-Prozesse?

黄舟
黄舟Original
2017-06-04 09:18:423127Durchsuche

Dieser Artikel stellt hauptsächlich vor, wie Java die aktuelle Prozess-ID und die Prozess-ID aller Java-Prozesse erhält. Es hat einen bestimmten Referenzwert.

Der erste besteht darin, das aktuelle Java zu erhalten Java-Prozess-ID, dies ist im Internet üblich, das heißt, das Java-Programm selbst gibt die Prozess-ID aus:

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(); 
  } 

}

Laufergebnisse:

2896@PC-20150603VRPL
2896

ManagementFactory ist eine Laufzeitverwaltung Und die Factory-Klasse zur Überwachung von Java VM kann viele statische Schnittstellen für die Verwaltung von VM bereitstellen, die besser sind als RuntimeMXBean;

RuntimeMXBean ist die Laufzeitverwaltungsschnittstelle von Java Virtual Machine.

Die aktuelle Prozess-ID ist 2896.

Aber diese Art, den Java-Prozess die ID selbst drucken zu lassen, ist nicht einfach zu verwenden, da wir oft den laufenden Java-Prozess kennen müssen, ohne den Code eines anderen Java-Programms zu ändern, wenn Sie dies auch tun Wenn Sie diesen Bedarf haben, können Sie sich die folgende Lösung ansehen:

Alle laufenden Java-Prozesse abrufen

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);
     }
   }
}

Laufergebnisse:

2752 ------> 
5172 ------> com.test.Target
5308 ------> com.test.ProcessID

Auf diese Weise können Sie die Prozessnummer anhand des Klassennamens ermitteln.

MonitoredHost und andere Klassen befinden sich in ${JAVA_HOME}/lib/tools.jar

Das Folgende ist eine Methode, mit der die entsprechende Java-Prozess-ID basierend auf der Klasse direkt gefunden werden kann :

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;
  }
}

Laufergebnis:

PID: 5172

Der Quellcode befindet sich im com.test-Paket meines GitHub-Projekts aoptracer

Das obige ist der detaillierte Inhalt vonWie erhält Java die aktuelle Prozess-ID und die Prozess-IDs aller Java-Prozesse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn