我需要检查Process.destroy()
的代码,看看它是kill
在Linux上的子进程的确切位置。
有谁知道这个方法的作用或链接到它的来源?我检查了jdk
源代码,Process
只是一个抽象类,destroy
方法尚未实现,似乎没有指向extends
或{的任何子类的链接{1}} implements
。任何帮助将不胜感激。
谢谢,
答案 0 :(得分:17)
流程管理和所有类似的操作都由操作系统完成。因此,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)
。