① 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中没有进程的概念,都是线程,线程的名字倒是可以改