Java - Process.destroy() Linux 源代码

2022-09-03 13:13:11

我需要检查代码,看看它到底是Linux上的子进程。Process.destroy()kill

有谁知道这种方法做什么或有链接到它的来源?我检查了源代码,只是一个抽象类,该方法尚未实现,似乎没有链接到任何子类或.任何帮助将不胜感激。jdkProcessdestroyextendsimplementsProcess

谢谢


答案 1

进程管理和所有类似操作均由操作系统完成。因此,JVM 必须调用相应的系统调用才能销毁进程。显然,这将因操作系统而异。

在 Linux 上,我们有系统调用来执行此操作 - 或者如果我们想终止当前正在运行的进程。当然,JDK 源代码中的本机方法根据 JVM 将要运行的操作系统进行分离。如前所述,有一种方法。在Linux的情况下,此方法由UNIXProcess实现。该方法的实现方式大致如下:killexitProcesspublic void destroy()destroy()

private static native void destroyProcess(int pid);
public void destroy() {
    destroyProcess(pid);
}

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

JNIEXPORT void JNICALL
Java_java_lang_UNIXProcess_destroyProcess(JNIEnv *env, jobject junk, jint pid)
{
    kill(pid, SIGTERM);
}

Linux系统调用在哪里,其源代码在Linux内核中可用,更准确地说是在文件中。它被声明为 。killkernel/signal.cSYSCALL_DEFINE2(kill, pid_t, pid, int, sig)

祝您阅读愉快!:)


答案 2

推荐