使用Java在Windows上"杀死进程树"

Raj*_*ath 5 java apache-commons-exec

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

我尝试过使用"execWatchdog.destroyProcess();" 在"start.bat"脚本上.但是它只会杀死start.bat进程而不是整个进程树.

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

我已经看到这个问题在c ++中执行相当于"杀死进程树"的Windows,它在c ++中执行相同的任务.我想知道是否有人通过JNI实现了调用Windows本机系统调用.

Raj*_*ath 8

终于有一些可行的东西,即使它是一个迂回的方式.

Apache Commons Exec API包含返回java.lang.Process对象的CommandLauncher类.感谢这个链接

这里是从java.lang.Process获取windows Process Id 的链接.这使用JNA库.

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


Bar*_*end 1

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