『壹』 java 獲取指定的進程id
package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class GetPid {
private static final String PNAME = "QQ";
public static void main(String[] args)
throws IOException {
System.out.println("包含關鍵字 "+PNAME+" 的進程有:");
System.out.println();
String path = System.getProperty("user.dir");
final File createFileName = new File(path + "\\mytempscript.vbe");
if(createFileName.exists()?createFileName.delete():createFileName.createNewFile()){}
final PrintWriter pw = new PrintWriter(new FileWriter(createFileName,
true), true);
pw.println("for each ps in getobject(\"winmgmts:\\\\.\\root\\cimv2:win32_process\").instances_");
pw.println("wscript.echo ps.handle&vbtab&ps.name");
pw.println("next");
pw.close();
final InputStream ii = Runtime.getRuntime().exec(
"cscript " + path + "\\mytempscript.vbe").getInputStream();
final InputStreamReader ir = new InputStreamReader(ii);
final BufferedReader br = new BufferedReader(ir);
String str = null;
String[] ss = null;
while ((str = br.readLine()) != null) {
if (str.indexOf(PNAME)>0&&str.endsWith(".exe")) {
ss = str.split("\\s");
for(int i=0;i<ss.length;i+=2){
System.out.println("****************************");
System.out.println("進程名:"+ss[i+1]+"\n進程ID:"+ss[i]);
}
}
}
System.out.println("****************************");
ir.close();
ii.close();
br.close();
}
}
運行結果如下
包含關鍵字 QQ 的進程有:
****************************
進程名:QQ.exe
進程ID:3956
****************************
『貳』 java jconsole的pid是什麼
PID(Process ID)操作系統里指進程ID號,也就是進程標識符。操作系統里每打開一個程序都會創建一個進程ID,即PID。
PID(進程式控制制符)英文全稱為Process Identifier,它也屬於電工電子類技術術語。
PID是各進程的代號,每個進程有唯一的PID編號。它是進程運行時系統隨機分配的,並不代表專門的進程。在運行時PID是不會改變標識符的,但是你終止程序後再運行PID標識符就會被系統回收,就可能會被繼續分配給新運行的程序。
含義
只要運行一程序,系統會自動分配一個標識!
是暫時唯一:進程中止後,這個號碼就會被回收,並可能被分配給另一個新進程。
只要沒有成功運行其他程序,這個pid會繼續分配給當前要運行的程序!
如果成功運行一個程序,然後再運行別的程序時,系統會自動分配另一個pid!
PID值越小越好。
『叄』 JDK命令介紹
命令jps用於列出java進程,直接運行jps不加任何參數,可以列出Java程序的進程ID以及Main函數等名稱。
參數-q指定jps只輸出進程ID,而不輸出類的短名稱
參數-m用於輸出傳遞給Java進程(主函數)的參數
參數 -l用於輸出主函數的完整路徑
參數 -v可以顯示傳遞給JVM的參數
jstat是一個可以用於觀察Java應用程序運行時信息的工具。它的功能非常強大,可以通過它,查看堆信息的詳細使用情況。主要用於監控虛擬機的各種運行狀態信息,如類的裝載、內存、垃圾回收、JIT編譯器等,在沒有GUI的伺服器上,這款工具是首選的一款監控工具。
基本使用語法為:
選項option可以由以下值構成:
-class:顯示ClassLoader的相關信息。
-compiler:顯示JIT編譯的相關信息。
-gc:顯示與GC相關的堆信息。
-gccapacity:顯示各個代的容量及使用情況。
-gccause:顯示垃圾收集相關信息(同-gcutil),同時顯示最後一次或當前正在發生的垃圾收集的誘發原因。
-gcnew:顯示新生代信息。
-gcnewcapacity:顯示新生代大小與使用情況。
-gcold:顯示老年代與永久代的信息。
-gcoldcapacity:顯示老年代的大小。
-gcmetacapacity:顯示元空間的大小。(在java8之前是使用-gcpermcapacity顯示永久代的大小)
-gcutil:顯示垃圾收集信息。
-printcompilation:輸出JIT編譯的方法信息。
以上選項可以輸入 jstat -options 查看。
-t 參數可以在輸出信息前加一個 Timestamp 列,顯示程序的運行時間。
-h 參數可以在周期性數據輸出時,輸出多少行數據後,跟著輸出一個表頭信息。
vmid 參數就是Java進程id。
interval 參數用於指定輸出統計數據的周期,單位為毫秒。
count 用於指定一共輸出多少次數據。
jinfo 可以用來查看正在運行的Java運行程序的擴展參數,甚至支持在運行時修改部分參數。可以用來查看正在運行的 java 應用程序的擴展參數,包括Java System屬性和JVM命令行參數;也可以動態的修改正在運行的 JVM 一些參數。當系統崩潰時,jinfo可以從core文件裡面知道崩潰的Java應用程序的配置信息。
jmap 可以生成Java應用程序的堆快照和對象的統計信息。基本語法為:
option 選項如下:
-mp 生成java堆轉儲快照。格式為: -mp:[live,]format=b,file=,其中live子參數說明是否只mp出存活的對象
-finalizerinfo 顯示在F-Queue中等待Finalizer線程執行finalize方法的對象。只在Linux/Solaris平台下有效
-heap 顯示java堆詳細信息,如使用哪種收集器、參數配置、分代情況等,在Linux/Solaris平台下有效
-histo 顯示堆中對象統計信息,包含類、實例對象、合集容量
-permstat 以ClassLoader為統計口徑顯示永久代內存狀態。只在Linux/Solaris平台下有效
-F 當虛擬機進程對-mp選項沒有相應時。可使用這個選項強制生成mp快照。只在Linux/Solaris平台下有效
使用 jhat 工具可以用於分析Java應用程序的堆快照內容。jhat 在分析完成後,使用HTTP伺服器展示其分析結果。在瀏覽器中訪問 http://localhost:7000/
jstack 可用於導出Java應用程序的線程堆棧。語法為:
-l選項用於列印鎖的附加信息。
jstack 工具會在控制台輸出程序中所有的鎖信息,可以使用重定向將輸出保存到文件。
通過 jstack 工具不僅可以得到線程堆棧,它還能自動進行死鎖檢查,輸出找到的死鎖信息。
之前所述的工具中,只涉及到監控本機的Java應用程序。而在這些工具中,一些監控工具也支持對遠程計算機的監控(如:jps、jstat)。為了啟用遠程監控,則需要配合使用jstatd工具。
命令jstatd是一個RMI服務端程序,它的作用相當於代理伺服器,建立本地計算機與遠程監控工具的通信。jstatd伺服器將本機的Java應用程序信息傳遞到遠程計算機。
JConsole(Java Monitoring and ManagementConsole)工具時JDK自帶的圖形化性能監控工具。通過JConsole工具,可以查看Java應用程序的運行概況,監控堆信息、永久區使用情況、類載入情況等。
『肆』 java獲取進程名稱
代碼:
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-20150603VRPL2896
當前進程ID為2896。
ManagementFactory是一個在運行時管理和監控Java VM的工廠類,它能提供很多管理VM的靜態介面,比如RuntimeMXBean;
RuntimeMXBean是Java虛擬機的運行時管理介面.