我需要检查的代码Process.destroy()
看看它究竟是如何kill
在Linux SA子。
有谁知道这种方法确实还是有一个链接到它的来源? 我查了jdk
源和Process
仅仅是一个抽象类和destroy
方法尚未落实,存在似乎是任何没有子链接extends
或implements
Process
。 任何帮助将不胜感激。
谢谢,
我需要检查的代码Process.destroy()
看看它究竟是如何kill
在Linux SA子。
有谁知道这种方法确实还是有一个链接到它的来源? 我查了jdk
源和Process
仅仅是一个抽象类和destroy
方法尚未落实,存在似乎是任何没有子链接extends
或implements
Process
。 任何帮助将不胜感激。
谢谢,
流程管理和所有类似操作由操作系统来完成。 因此,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)
快乐的阅读! :)