首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java在windows上“杀死进程树”

使用Java在windows上“杀死进程树”
EN

Stack Overflow用户
提问于 2011-09-26 11:27:59
回答 4查看 4.4K关注 0票数 5

我有一个Java webstart进程,它是windows批处理脚本的一部分。在本例中,我在批处理脚本中使用javaws命令。使用"apache commons exec“以编程方式调用此匹配脚本( start.bat)。在某些情况下,javaws调用的java进程会挂起,我必须从批处理脚本start.bat开始终止整个进程线程。有没有一种编程方法可以通过apache commons exec杀死整个进程树?

我尝试在"start.bat“脚本上使用"execWatchdog.destroyProcess();”。然而,它只杀死start.bat进程,而不是整个进程树。

有没有办法通过apache-commons-exec或类似的代码杀死整个进程树?

我见过在c++中执行相同任务的问题Performing equivalent of "Kill Process Tree" in c++ on windows。我想知道是否有人通过JNI实现了调用windows原生系统调用。

EN

回答 4

Stack Overflow用户

发布于 2011-10-03 00:30:59

最终得到了一些可行的东西,尽管这是一种间接的方式。

Apache Commons Exec API包含返回java.lang.Process对象的CommandLauncher类。多亏了link

这里是从java.lang.Process获取windows进程Id的link。它使用JNA库。

最后是进程Id,这里是杀死进程树的命令串//String killCmd = "taskkill /F /T /PID“+JNAHandler.getPid(进程);

票数 8
EN

Stack Overflow用户

发布于 2011-10-15 19:01:44

不幸的是,正如您已经发现的那样,没有一种纯Java方法可以做到这一点。您必须求助于本机命令或JNI库,所有这些都依赖于平台,并且比纯Java解决方案更复杂。

可能值得对Java数据库中的相关bug进行提升:http://bugs.sun.com/view_bug.do?bug_id=4770092

幸运的是,我们可以说服Java开发人员相信,Java 8对子进程的糟糕处理是值得修复的。

票数 2
EN

Stack Overflow用户

发布于 2011-09-26 18:18:17

据我所知,commons-exec中没有这样的选项。甚至不可能获得您刚启动的任何进程的PID。您可以在bash脚本中终止( trap ) kill信号,并在脚本进程终止时让处理程序删除子进程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7550392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档