国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java獲取當前進程ID以及所有Java進程的進程ID

stormzhang / 1933人閱讀

摘要:獲取當前進程以及所有進程的進程首先是獲取當前運行的進程,這個是網上常見的,也就是程序自身將進程打印出來是一個在運行時管理和監控的工廠類,它能提供很多管理的靜態接口,比如是虛擬機的運行時管理接口獲取所有正在運行著的進程獲取監控主機取得所有在活

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

}
ManagementFactory是一個在運行時管理和監控Java VM的工廠類,它能提供很多管理VM的靜態接口,比如RuntimeMXBean;
RuntimeMXBean是Java虛擬機的運行時管理接口.

獲取所有正在運行著的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(local.activeVms());
         // 遍歷集合,輸出PID和進程名
         for(Object process : vmlist) {
             MonitoredVm vm = local.getMonitoredVm(new VmIdentifier("http://" + process));
             // 獲取類名
             String processname = MonitoredVmUtil.mainClass(vm, true);
             System.out.println(process + " ------> " + processname);
         }
     }
}
MonitoredHost等類位于${JAVA_HOME}/lib/tools.jar

_
運行結果:

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

直接根據類找到對應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(local.activeVms());
        // 遍歷集合,輸出PID和進程名
        for(Object process : vmlist) {
            MonitoredVm vm = local.getMonitoredVm(new VmIdentifier("http://" + process));
            // 獲取類名
            String processname = MonitoredVmUtil.mainClass(vm, true);
            if(cls.getName().equals(processname)) {
                return ((Integer)process).intValue();
            }
        }
        return -1;
    }
}

根據類名稱找到對應Java進程ID的方法


package com.example.demo;

import sun.jvmstat.monitor.*;

import java.net.URISyntaxException;
import java.util.HashSet;
import java.util.Set;

public class ProcessID2 {
    public static void main(String[] args) throws Exception {
        int pid = getProcess("cn.usr.demo.DemoApplication");
        System.out.println("PID: " + pid);
    }

    public static int getProcess(String cls) throws MonitorException, URISyntaxException {
        if (cls == null) {
            return -1;
        }

        // 獲取監控主機
        MonitoredHost local = MonitoredHost.getMonitoredHost("localhost");
        // 取得所有在活動的虛擬機集合
        Set vmlist = new HashSet(local.activeVms());
        // 遍歷集合,輸出PID和進程名
        for (Object process : vmlist) {
            MonitoredVm vm = local.getMonitoredVm(new VmIdentifier("http://" + process));
            // 獲取類名
            String processname = MonitoredVmUtil.mainClass(vm, true);
            if (cls.equals(processname)) {
                return ((Integer) process).intValue();
            }
        }
        return -1;
    }
}           
               
                                           
                       
                 
            
                     
             
               

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74381.html

相關文章

  • Java獲取當前進程ID以及所有Java進程進程ID

    摘要:獲取當前進程以及所有進程的進程首先是獲取當前運行的進程,這個是網上常見的,也就是程序自身將進程打印出來是一個在運行時管理和監控的工廠類,它能提供很多管理的靜態接口,比如是虛擬機的運行時管理接口獲取所有正在運行著的進程獲取監控主機取得所有在活 Java獲取當前進程ID以及所有Java進程的進程ID 首先是獲取當前Java運行的Java進程ID,這個是網上常見的,也就是Java程序自身將...

    roland_reed 評論0 收藏0
  • Java多線程筆記(零):進程、線程與通用概念

    摘要:父進程調用創建子進程。因而,一個進程的第一個線程會隨著這個進程的啟動而創建,這個線程被稱為該進程的主線程。另一方面,線程不可能獨立于進程存在。終止線程線程可以通過多種方式來終結同一個進程中的其他線程。 前言 不積跬步,無以至千里;不積小流,無以成江海。在學習Java多線程相關的知識前,我們首先需要去了解一點操作系統的進程、線程以及相關的基礎概念。 進程 通常,我們把一個程序的執行稱為一...

    blastz 評論0 收藏0
  • 進程,線程講到AsyncTask

    摘要:系統創建好進程后,實際上就啟動執行了該進程的主執行線程。也就是說,對線程來說,進程相當于一個容器,可以有許多線程同時在一個進程里執行。默認情況下,同一應用程序下的所有組件都運行在相同的進程和線程一般稱為程序的主線程中。 一 前言 異步編程是android初學者的一個難點,卻也是始終不能繞過的一個坎。可以說幾乎每個app都逃不了網絡編程,而網絡編程又往往建立在異步的機制之上(你不應該也無...

    姘存按 評論0 收藏0

發表評論

0條評論

stormzhang

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<