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)
ます。
幸せな読書!:)