Java - Linux的Process.destroy()源代码

Ali*_*Ali 14 java linux kill process

我需要检查一下代码,Process.destroy()看看它kill在Linux上是一个什么样的子进程.

有谁知道这个方法的作用或链接到它的来源?我检查了jdk源代码,Process它只是一个抽象类,并且该destroy方法尚未实现,似乎没有链接到任何子类extends或者implements Process.任何帮助将不胜感激.

谢谢,

Dan*_*zar 19

进程管理和所有类似的操作都由操作系统完成.因此,JVM必须调用适当的系统调用才能销毁进程.显然,这将在操作系统之间变化.

在Linux上,我们有killsyscall来做 - 或者exit我们想要终止当前正在运行的进程.当然,JDK源中的本机方法是根据JVM将要运行的操作系统分开的.如前所述,Process有一种public void destroy()方法.在Linux的情况下,此方法由UNIXProcess.实现.该destroy()方法实现如下:

private static native void destroyProcess(int pid);
public void destroy() {
    destroyProcess(pid);
}
Run Code Online (Sandbox Code Playgroud)

destroyProcess()反过来,本机方法定义UNIXProcess_md.c如下:

JNIEXPORT void JNICALL
Java_java_lang_UNIXProcess_destroyProcess(JNIEnv *env, jobject junk, jint pid)
{
    kill(pid, SIGTERM);
}
Run Code Online (Sandbox Code Playgroud)

killLinux系统调用在哪里,其源代码在Linux内核中可用,更准确地说在文件中kernel/signal.c.它被宣布为SYSCALL_DEFINE2(kill, pid_t, pid, int, sig).

快乐阅读!:)