我需要获取通过Java的Runtime.getRuntime()。exec()命令启动的进程的PID。使用JNI获取运行时进程的PID
我知道如何在JNA做到这一点。但我真的想用JNI来做,并创建自己的库。有谁知道该怎么做?
import java.lang.reflect.Field;
class GetPid
{
public native int getPid(long procHandle);
static
{
System.loadLibrary("getpid");
}
public static void main(String args[])
{
try {
Process process = Runtime.getRuntime().exec("calc");
Field f = process.getClass().getDeclaredField("handle");
f.setAccessible(true);
long procHandle = f.getLong(process);
System.out.println("prochandle: " + procHandle + ", pid: " + new GetPid().getPid(procHandle));
} catch(Exception e) {
e.printStackTrace();
}
}
}
但是C部分应该是什么样子?
JNIEXPORT jint JNICALL
Java_GetPid_getPid(JNIEnv *env, jobject obj, jlong handle)
{
...
return ???;
}
如果有人能够帮助我,那将会很棒。我主要寻求Windows解决方案,因为您可以从Process字段获得Linux的PID,但我不介意是否有人能够告诉我如何在Linux/Solaris中执行此操作。
非常感谢您提前!
@Jermaine徐:我不需要当前Java的PID进程,但是通过exec()执行的那个进程。换句话说:我需要使用“jlong handle”参数来获取PID。我需要它的Windows。平台独立性会很好,但我想它很复杂。 – Roland 2013-03-10 07:59:55
@Taky:谢谢,我已经去过了。这不是我要找的。我不需要Java进程的PID,并且建议的JNA对此很重要。 – Roland 2013-03-10 08:01:47