2007/08/20

jps - Java Virtual Machine Process Status Tool

 

 

 

無意間在 jini(99% jakarta)雅加達爪哇咖啡台灣總店 發現一個好用的 java tool,jps。
jps 是 jdk 5.0 之後提供的一個工具,

可以透過此工具取得目前系統上執行的 java 程式之系統訊息。

相關的 java 官方說明如連結:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html 

 


很多 java 程式需要知道自己是不是系統上唯一執行的程式,

大部分的解決方法是透過 bind 一個 socket port 來確保程式是唯一的,

但是若需要同時指定不同的設定檔執行好幾次同一支程式時,

單純用 socket port 來做識別,似乎就有其困難之處,且很多系統上,是不太允許程式隨便佔用 port 的。

 

透過 jps 搭配不同的參數,可以得知目前系統上 java 程式的細節,

例如 process id、程式 main class 的完整名稱(-l)、執行程式的參數(-m)、VM 的參數等等(-v),

 使用 -l 參數,可知道是否已經有相同的程式於系統中執行,

搭配 -m 參數,可知道是否有相同的程式使用了哪些參數在系統中執行,

使用 -v 參數,可以知道執行程式時的 vm 參數,例如 classpath、程式執行的路徑、以及記憶體的調適等。

 

若要用程式來處理的話,則如 jini(99% jakarta)雅加達爪哇咖啡台灣總店 所提到的,

使用 runtime.exec 來執行 jps,並取得其結果再做進一步分析,範例如下:





import java.io.*;

 

public class JPS_Test {
    public static void main(String[] args) {
        try {
            Runtime runtime = Runtime.getRuntime();
            Process process = runtime.exec("jps.exe -l -m -v");
            InputStream is = process.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}




 

或是直接參考 Jps 的做法去取得資訊,

( Sun 已經公開 jdk 的 source 了,下載後,路徑是 \j2se\src\share\classes\sun\tools\jps\Jps.java )

不過這種做法就像使用特定 JCE Provider 去處理 Certificate 一樣,

要使用到 sun.xxx 的 package,而非 java 標準之 package,是沒有文件和官方支援的哦。

 

沒有留言:

張貼留言