在 Java 中终止进程的最佳方法是什么?
获取 PID,然后用以下命令杀死它Runtime.exec()
?
Use destroyForcibly()
?
这两种方法有什么区别,还有其他解决方案吗?
如果您要终止的进程已由您的应用程序启动
那么你可能已经参考过它了(ProcessBuilder.start()
or Runtime.exec()
两者都返回一个引用)。在这种情况下,您可以简单地调用p.destroy()
。我认为这是最干净的方法(但要小心:子进程由p
可能还活着,检查一下Process.destroy 不会杀死多个子进程 https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4770092了解更多信息)。
The destroyForcibly
仅应在以下情况下使用destroy()
在一定的超时后失败。简而言之
- 终止进程
destroy()
- 允许进程以合理的超时正常退出
- 杀死它
destroyForcibly()
如果进程还活着
如果您要杀死的进程是外部进程
那么你就没有太多选择:你需要通过操作系统API(Runtime.exec
)。在 Windows 上,要调用的程序是taskkill.exe
,而在 Mac 和 Linux 上您可以尝试kill
.
看一下Java 8 支持 Process.destroyForcously() 和 .isAlive() https://github.com/zeroturnaround/zt-exec/issues/19 and 使用 Java 终止进程 https://stackoverflow.com/questions/6356340/killing-a-process-using-java and 编写一个简单的 Java 应用程序以在指定时间后终止任何进程 http://invisiblecomputer.wonderhowto.com/how-to/code-simple-java-app-kill-any-process-after-specified-time-0133513/了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)