我有一个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原生系统调用。
发布于 2011-10-03 00:30:59
发布于 2011-10-15 19:01:44
不幸的是,正如您已经发现的那样,没有一种纯Java方法可以做到这一点。您必须求助于本机命令或JNI库,所有这些都依赖于平台,并且比纯Java解决方案更复杂。
可能值得对Java数据库中的相关bug进行提升:http://bugs.sun.com/view_bug.do?bug_id=4770092
幸运的是,我们可以说服Java开发人员相信,Java 8对子进程的糟糕处理是值得修复的。
发布于 2011-09-26 18:18:17
据我所知,commons-exec中没有这样的选项。甚至不可能获得您刚启动的任何进程的PID。您可以在bash脚本中终止( trap ) kill信号,并在脚本进程终止时让处理程序删除子进程。
https://stackoverflow.com/questions/7550392
复制相似问题