① java 怎麼獲取當前進程的映像名稱
網上查了一些資料,說是沒辦法直接在 java 中獲取到,
網上資料說,可以使用 java 的 native 方法,通過在 c++ 中實現 native 方法,此時就可以在 java 中直接調用了。
例子:
public class JavaNative {
static {
try {
System.loadLibrary("JavaNativeDLL.dll");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load.\n" + e);
}
}
public native java.util.List getProcessList();
public native List getProcessIDList();
public native String getProcessName(long processID);
}
然後,你通過 C++ 寫一個 JNI 來實現上面這個 JavaNative 的 Class 類,然後編繹生成出一個 JavaNativeDLL.dll ,然後在 JavaNative 中載入這個 JavaNativeDLL.dll。
這樣,你在任何 java 程序中可以像普通 java 調用方法一樣,直接使用 JavaNative 來獲取到進程名稱了。
使用方法:
public static void main(String[] args) {
JavaNative jn = new JavaNative();
List list = jn.getProcessIDList();
for(int i=0; i<lilst.size(); i++) {
String processName = jn.getProcessName((long)list.get(i));
System.out.println("進程名稱是:" + processName );
}
}
② 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虛擬機的運行時管理介面.
③ 如何改java程序的進程名
javaw.exe是虛擬機的進程
java中沒有進程的概念,都是線程,線程的名字倒是可以改