15

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

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

谢谢,

4

1 回答 1

24

进程管理和所有类似的操作都由操作系统完成。因此,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);
}

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

快乐阅读!:)

于 2012-05-17T11:21:26.600 回答