我需要它通过Java的调用Runtime.getRuntime()启动的进程的PID。EXEC()命令。
我知道该怎么做,在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的解决方案,因为你可以从过程现场得到PID为Linux,但我不介意,如果有人能告诉我如何做到这一点在Linux / Solaris上为好。
非常感谢你提前!