>  기사  >  Java  >  Java는 현재 프로세스 ID와 모든 Java 프로세스의 프로세스 ID를 어떻게 얻습니까?

Java는 현재 프로세스 ID와 모든 Java 프로세스의 프로세스 ID를 어떻게 얻습니까?

黄舟
黄舟원래의
2017-06-04 09:18:423127검색

이 글에서는 주로 Java가 현재 프로세스 ID와 모든 Java 프로세스의 프로세스 ID를 얻는 방법을 소개합니다. 여기에는 특정 참조 값이 있습니다. 관심 있는 친구는 이를 참조할 수 있습니다.

첫 번째는 현재 Java에서 실행 중인 Java 프로세스를 얻는 것입니다. .ID는 인터넷에서 흔히 볼 수 있는 것입니다. 즉, Java 프로그램 자체가 프로세스 ID를 인쇄합니다.

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

}

실행 결과:

2896@PC-20150603VRPL
2896

ManagementFactory는 Java VM을 관리하고 모니터링하는 팩토리 클래스입니다. 런타임에 다양한 관리 VM 정적인터페이스, RuntimeMXBean보다 우수함;

RuntimeMXBean은 Java 가상 머신의 런타임 관리 인터페이스입니다.

현재 프로세스 ID는 2896입니다.

그러나 Java 프로세스가 자체적으로 ID를 인쇄하도록 하는 이 방법은 사용하기가 쉽지 않습니다. 왜냐하면 다른 Java 프로그램의 코드를 수정하지 않고 실행 중인 Java 프로세스의 ID를 알아야 하는 경우가 많기 때문입니다. 또한 이러한 요구 사항이 있는 경우 다음 솔루션을 살펴볼 수 있습니다.

실행 중인 모든 Java 프로세스 가져오기

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

실행 결과:

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

방법은 클래스 이름을 기준으로 프로세스 번호를 찾을 수 있습니다.

MonitoredHost 및 기타 클래스는 ${JAVA_HOME}/lib/tools.jar에 위치합니다.

다음은 클래스를 기반으로 해당 Java 프로세스 ID를 직접 찾을 수 있는 방법입니다.

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

실행 결과:

PID: 5172

소스 코드는 내 Git허브 프로젝트 aoptracer의 com.test 패키지에

위 내용은 Java는 현재 프로세스 ID와 모든 Java 프로세스의 프로세스 ID를 어떻게 얻습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.