在Java中杀死进程的正确方法
在Java中杀死进程的最佳方法是什么?
获取PID,然后用?Runtime.exec()
用?destroyForcibly()
这两种方法有什么区别,还有其他解决方案吗?
在Java中杀死进程的最佳方法是什么?
获取PID,然后用?Runtime.exec()
用?destroyForcibly()
这两种方法有什么区别,还有其他解决方案吗?
然后,您可能有对它的引用(或两者都返回引用)。在这种情况下,您只需调用 .我认为这是最干净的方式(但要小心:启动的子进程可能会保持活动状态,请检查Process.destroy不会杀死多个子进程以获取更多信息)。ProcessBuilder.start()
Runtime.exec()
p.destroy()
p
仅当在特定超时后失败时才应使用 。简而言之destroyForcibly
destroy()
destroy()
destroyForcibly()
那么你没有太多的选择:你需要通过操作系统API()。在Windows上,要调用的程序将是 ,而在Mac和Linux上,您可以尝试。Runtime.exec
taskkill.exe
kill
有关详细信息,请查看 Java 8 中对 Process.destroyForcibly() 和 .isAlive() 的支持,以及使用 Java 杀死进程并编写简单的 Java 应用程序以在指定时间后杀死任何进程。
如果你试图杀死你的java代码启动的主进程,我建议使用.这里解释了好处:我们什么时候应该在java中调用system exit。System.exit()
从本质上讲,将运行关闭钩子,以确保在进程被杀死之前,任何可能尚未完成其工作的依赖非守护进程都被杀死。这是这样做的干净方法。System.exit()
如果该进程不是您的,您将不得不依靠操作系统为您完成这项工作,如以下答案中所述:使用Java杀死进程
在这种情况下,您在*nix上杀死的建议将是一个不错的方法。Runtime.exec()
现在至于 ,您通常会在由 java 代码生成的子进程上调用它,该子进程可能是从进程 api 或destroyForcibly()
ProcessBuilder.start()
Runtime.exec()