爪哇 - 用于Linux Process.destroy()的源代码(Java - Process.

2019-06-24 12:58发布

我需要检查的代码Process.destroy()看看它究竟是如何kill在Linux SA子。

有谁知道这种方法确实还是有一个链接到它的来源? 我查了jdk源和Process仅仅是一个抽象类和destroy方法尚未落实,存在似乎是任何没有子链接extendsimplements Process 。 任何帮助将不胜感激。

谢谢,

Answer 1:

流程管理和所有类似操作由操作系统来完成。 因此,JVM必须调用相应的系统调用,以摧毁一个过程。 这将很明显,操作系统之间会有所不同。

在Linux上,我们有kill系统调用来做到这一点-或者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);
}

kill是Linux系统调用,它的源代码可以在Linux内核中,更精确地在文件kernel/signal.c 。 它被声明为SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)

快乐的阅读! :)



文章来源: Java - Process.destroy() source code for Linux