이 글에서는 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!