JavaのRuntime.getRuntime()。exec()コマンドを介して起動されるプロセスの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 ???;
}
誰かが私を助けてくれるといいですね。LinuxのPIDは[プロセス]フィールドから取得できるため、私は主にWindowsソリューションを探していますが、Linux/Solarisでもこれを行う方法を誰かに教えてもらってもかまいません。
事前にどうもありがとうございました!