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

问题描述 投票:11回答:1

我需要检查Process.destroy()的代码,看看它是如何在Linux上进行kills子进程的。

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

谢谢,

java linux process kill
1个回答
18
投票

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

在Linux上,我们有kill系统调用来做 - 或exit如果我们想要终止当前正在运行的进程。当然,JDK源中的本机方法是根据JVM将要运行的操作系统分开的。如前所述,Processpublic 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)

快乐阅读! :)

© www.soinside.com 2019 - 2024. All rights reserved.