我需要检查Process.destroy()代码,看看它是如何kill Linux上的subprocess。
有谁知道这个方法做了什么,或者有一个链接到它的源? 我检查了jdk源代码,并且Process仅仅是一个抽象类,而且destroy方法还没有实现,似乎没有任何指向extends或implements Process子类的链接。 任何帮助将不胜感激。
谢谢,
是否有用于x64 Windows的mem.exe版本?
如何仅通过Win32 API实现.NET Process.Exited事件
难以将应用程序移植到64位吗?
CreateThread vs fork()
Apache服务在运行cgi程序时是否存在连接/内存限制?
在Winx64中使用Boost :: asio:我卡住了,需要弄清楚如何为x64构buildlibboost_system_xxxx.lib
如何获得进程的祖父母身份证
_do_fork()如何返回两个不同的PID(一个用于父进程,一个用于subprocess)
vb 2008 WriteProcessMemory()返回0
进程管理和所有类似的操作由OS完成。 因此,JVM必须调用适当的系统调用来销毁进程。 显然,这在操作系统之间会有所不同。
在Linux上,我们有kill syscall来做到这一点 – 或者如果我们想要终止当前正在运行的进程,请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) 。
快乐阅读!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。