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

标签 java linux process kill

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

有谁知道此方法的作用或有其源代码的链接吗?我查看了jdk源码,Process只是一个抽象类,destroy方法还没有实现,好像没有任何链接extendsimplements Process 的子类。任何帮助将不胜感激。

谢谢,

最佳答案

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

在 Linux 上,我们有 kill 系统调用来执行此操作 - 或者 exit 如果我们想终止当前正在运行的进程。当然,JDK 源代码中的 native 方法是根据 JVM 将在其上运行的操作系统分开的。如前所述,Process 有一个 public void destroy() 方法。对于 Linux,此方法由 UNIXProcess 实现. destroy() 方法的实现方式大致如下:

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

native 方法 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)

祝您阅读愉快! :)

关于Java - 用于 Linux 的 Process.destroy() 源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10630303/

相关文章:

java - 设置 Java AWS Lambda VM 参数

java - Selenium Webdriver 测试在 Jenkins(**Linux**) 上失败 "The driver is not executable"

linux - 为什么我的函数没有在 case 语句中完全执行?

c - Linux 在使用 PPID 1 重新启动时不会清理资源(套接字)

c - 在进程(不是线程)中使用 semaphore.h

java - 如何在单个 ListView 中实现长按监听器和 onclicklistener

java - 如何正确打开png文件

java - 错误 : Cannot find symbol Methods

linux - 用新行替换逗号但保留第一列

linux - 如何在 Linux 后台终止作业调度程序?