`

在JAVA程序中如何取得自身的进程号(PID)

阅读更多

在JAVA程序中如何取得自身的进程号(PID)

============================

需求如题,不再赘述。

 

在JDK1.5以上版本,自带了一个工具jps.exe,可以帮助我们达成目标,简单测试代码如下:

import java.io.*;

public class JpsTest{

  public static void test(){
    String jps = "bin\\jps.exe";
    try{
      Process p = Runtime.getRuntime().exec(jps);
      InputStream in = p.getInputStream();
      InputStreamReader reader = new InputStreamReader(in, "UTF-8");
      BufferedReader br = new BufferedReader(reader);
      String inStr = null;
      StringBuffer sb = new StringBuffer("");
      while( (inStr = br.readLine()) != null ){
        sb.append(inStr + "\r\n");
      }
      System.out.println(sb.toString());
      int count = 30;
      while(count-->0){
        try{
          Thread.currentThread().sleep(1000);
        }catch(Exception ex1){
          ex1.printStackTrace();
        }
      }
    }catch(Exception e){
      e.printStackTrace();
    }

  }

  public static void main(String[] args){
    JpsTest.test();
  }
}

 

在WinXP SP2上执行结果如下:

J:\>java JpsTest
740 JpsTest
3188 TCPMon
764 Jps

 

第一列是PID,第二列是程序名,根据程序名取出对应的PID即可。

 

JPS依赖 JDK_HOME\lib\tools.jar,如果是只在JRE环境下运行,需要把 JDK_HOME\bin\jps.exe 和 JDK_HOME\lib\tools.jar 分别复制到JRE_HOME\bin 和 JRE_HOME\lib下。对于有些对程序大小要求比较高的系统,可以给tools.jar瘦身,我不完全测试的结果如下:

tools.jar中只保留如下内容即可:

 

sun\jvmstat\ 下所有内容

sun\tools\jps 下所有内容

 

 ========================================

其实不用jps.exe也可以,只要执行:

 

J:\>java -cp lib\tools.jar sun.tools.jps.Jps
3188 TCPMon
3272 Jps

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics