获取使用中的PID Java Mac

问题描述:

这些方法依赖于以下导入。这些都是旧的,从阅读中不应该使用它。这只适用于Java 6无论如何,我想这个更新到Java 8.获取使用中的PID Java Mac

有谁知道如何获得在OS X上的Java 8的PID?

import sun.jvmstat.monitor.*; 
import java.lang.management.*; 


     public String getUsageDescription() 
     { 
      System.out.println("** Get Usage Description"); 
      int pid = 0; 
      RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean(); 
      pid = Integer.parseInt(rt.getName().substring(0,rt.getName().indexOf("@"))); 
      System.out.println("Run Time PID = "+pid); 
      return new String(getDeviceName()+" "+Integer.toString(pid)); 
     } 


     public static boolean isPIDInUse(int pid) 
     { 
      try{ 
       String s = null; 
       int java_pid; 
       MonitoredHost host = MonitoredHost.getMonitoredHost(s); 
       for(Object activeVmPID : host.activeVms()) 
       { 
        java_pid = (Integer)activeVmPID; 
        System.out.println("****************PID = "+java_pid); 
        if(java_pid == pid){ 
         System.out.println("In Use\n"); 
         return true; 
        } 
       } 
      } 
      catch(Exception e) 
      { 
       System.out.println("Exception: "+e.getMessage()); 
      } 
      return false; 

     } 

解决方案:

public static boolean isPIDInUse(int pid) { 

     try { 

      String s = null; 
      int java_pid; 

      RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean(); 
      java_pid = Integer.parseInt(rt.getName().substring(0, rt.getName().indexOf("@"))); 

      if (java_pid == pid) { 
       System.out.println("In Use\n"); 
       return true; 
      } 
     } catch (Exception e) { 
      System.out.println("Exception: " + e.getMessage()); 
     } 
     return false; 
    } 

使用第一种方法。它在Java 8中工作,不使用内部API。

请注意,您不需要使用new String(String)

+0

谢谢!我更新了原始帖子以显示解决方案。 – PartialData

+0

由于PID不会改变,我会把它放在一个常量中,所以它只计算一次。 –