进程管理和所有类似的操作都由操作系统完成.因此,JVM必须调用适当的系统调用才能销毁进程.显然,这将在操作系统之间变化.
在Linux上,我们有kill syscall来做 – 或者如果我们要终止当前正在运行的进程则退出.当然,JDK源中的本机方法是根据JVM将要运行的操作系统分开的.如前所述,Process有一个public void destroy()方法.在Linux的情况下,此方法由UNIXProcess实现.detroy()方法实现如下:
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).
快乐阅读! 🙂