当前位置: 首页 > 面试题库 >

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

漆雕令秋
2023-03-14
问题内容

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

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

谢谢,


问题答案:

进程管理和所有类似操作均由OS完成。因此,JVM必须调用适当的系统调用才能破坏进程。显然,这将在操作系统之间有所不同。

在Linux上,我们可以通过killsyscall来执行此操作-或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);
}

killLinux syscall
在哪里,其源可在Linux内核中找到,更确切地说在file中kernel/signal.c。声明为SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)

祝您阅读愉快!:)



 类似资料:
  • 问题内容: 在Linux中,当我在java.lang.Process对象上运行destroy函数(类型为true的java.lang.UNIXProcess)时,它会发送SIGTERM信号进行处理,有没有办法用SIGKILL杀死它? 问题答案: 不使用纯Java。 你最简单的选择是使用运行的外部进程的命令。 不幸的是,掌握PID并不是那么简单。您将需要使用反射黑魔法来访问该字段,或者弄乱该命令的输

  • 问题内容: 在Linux中,当我在java.lang.Process对象上运行destroy函数(类型为true的java.lang.UNIXProcess)时,它会发送SIGTERM信号进行处理,有没有办法用SIGKILL杀死它? 问题答案: 不使用纯Java。 你最简单的选择是使用运行的外部进程的命令。 不幸的是,掌握PID并不是那么简单。您将需要使用反射黑魔法来访问该字段,或者弄乱该命令的输

  • 在Linux Mint上运行NetBeans 12.6。编辑Java源文件时,编辑器的行为不符合预期。将光标放置在文本行的末尾,然后单击回车键,将导致编辑器插入新行,然后将光标放置在其开头,而不是放在上面行的第一个非空白字符下面。因此,我必须在左边空白处输入代码,然后使用源代码格式选项来正确对齐。早期版本的NetBeans表现与预期一样,其他IDE的.C源文件也能正确编辑。我在两台PC上运行这个版

  • 问题内容: 在哪里可以找到Java库类的源代码?我的意思是上课。 平台:Windows。 问题答案: 下载JDK。公共类的源位于src.zip中。

  • 问题内容: 假设我对一种特定Linux实用程序(如)的源感兴趣。在哪里可以找到该实用程序的源代码? 问题答案: 我所做的是打字 然后走到最底下,找到“ GNU coreutils 6.10”。所以我用Google搜索了’coreutils’,然后…发现了刚刚链接到的网站joschi。

  • 问题内容: 我有一个Java应用程序,用于准备操作系统命令并给我一个对象。(实际的os命令是使用cygwin在ssh上进行rsync的)。 这在Windows中运行良好,但是,如果我想停止使用它的进程将不会杀死子ssh和rsync进程……..我必须使用Windows任务管理器手动将其杀死。 是否有可能在我打电话之前以某种方式获取该进程的信息并发送ctrl-c ? 如果有人对解决方法有任何想法,那就