我怎么杀使用Ant启动一个失控的Java进程?(How do I kill a runaway Ja

2019-09-18 00:22发布

如果我从一个Ant脚本开始分叉的java程序,并杀死蚂蚁的过程,它不会杀死Java进程。 这是无论是从IDE或从命令行运行它的情况。

<target name="myTarget" >
  <java classname="path.to.MyClass" 
        fork="yes" 
        failonerror="true" 
        maxmemory="128M">
    <classpath refid="run" />
  </java>
</target>

有没有办法来链接这些,使杀蚂蚁过程会杀死java程序?

我见过以下Q&A -但这似乎把重点放在如何手工杀掉java进程。 我不想这样做,因为我有一些其他的Java应用程序运行,并寻找合适的java.exe进程在任务管理器杀并不总是直线前进。

Answer 1:

不幸的是,看起来,这是一个长期和已知问题。

当Ant任务终止时,派生的Java程序关闭挂钩不会被触发。 (这似乎是因为Java 1.4中(一个问题!))

以供参考:

  • 一个蚂蚁bug报告
  • 一个Java的不-A-bug报告


Answer 2:

如果设置fork为“无”,同样VM将被使用,所以杀蚂蚁过程中会过于杀死这个特定的Java程序。



Answer 3:

杀死进程的跨平台解决方案将涉及一点努力。 见的Java工具/方法来强制杀死一个子进程 。

对于Windows XP及更高版本,以下批处理脚本可能会有所帮助:

for /f "skip=1 usebackq" %%h in (`wmic process where "Name like 'java%%.exe' and CommandLine like '%%path.to.MyClass%%'" get ProcessId ^| findstr .`) do taskkill /F /T /PID %%h

此脚本使用内置的命令WMIC找到任何运行Java *有.exe文件进程的进程ID path.to.MyClass某处命令行。 如果您需要WMIC在符合特定的Java程序更具体,发挥与WMIC的帮助模式中列出的属性:

wmic process get /?

taskkill将杀死给定根进程ID(/ PID)的处理树(/ T)。



文章来源: How do I kill a runaway Java process started by Ant?
标签: java ant kill