15

LinuxでサブプロセスがProcess.destroy()どのように正確に実行されるかを確認するには、のコードを確認する必要があります。kill

このメソッドが何をするか、またはそのソースへのリンクを知っている人はいますか? jdkソースを確認したProcessところ、単なる抽象クラスであり、destroyメソッドは実装されていません。extendsまたはimplements Process. どんな助けでも大歓迎です。

ありがとう、

4

1 に答える 1

24

プロセス管理などはOSが行います。したがって、JVM は、プロセスを破棄するために適切なシステム コールを呼び出す必要があります。これは、明らかに、オペレーティング システムによって異なります。

Linux では、それをkill行うための syscall があります。またはexit、現在実行中のプロセスを終了したい場合です。もちろん、JDK ソースのネイティブ メソッドは、JVM が実行されるオペレーティング システムに応じて分かれています。前述のように、Processにはpublic void destroy()メソッドがあります。Linux の場合、このメソッドは によって実装されUNIXProcessます。このdestroy()メソッドは、次のように実装されています。

private static native void destroyProcess(int pid);
public void destroy() {
    destroyProcess(pid);
}

次に、ネイティブ メソッドdestroyProcess()は で定義されUNIXProcess_md.c、次のようになります。

JNIEXPORT void JNICALL
Java_java_lang_UNIXProcess_destroyProcess(JNIEnv *env, jobject junk, jint pid)
{
    kill(pid, SIGTERM);
}

Linux syscall はどこkillにあり、そのソースは Linux カーネルで、より正確にはファイルで利用できますkernel/signal.c。として宣言されていSYSCALL_DEFINE2(kill, pid_t, pid, int, sig)ます。

幸せな読書!:)

于 2012-05-17T11:21:26.600 に答える