LinuxでサブプロセスがProcess.destroy()どのように正確に実行されるかを確認するには、のコードを確認する必要があります。kill
このメソッドが何をするか、またはそのソースへのリンクを知っている人はいますか? jdkソースを確認したProcessところ、単なる抽象クラスであり、destroyメソッドは実装されていません。extendsまたはimplements Process. どんな助けでも大歓迎です。
ありがとう、
プロセス管理などは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)ます。
幸せな読書!:)