如果我从一个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进程在任务管理器杀并不总是直线前进。
不幸的是,看起来,这是一个长期和已知问题。
当Ant任务终止时,派生的Java程序关闭挂钩不会被触发。 (这似乎是因为Java 1.4中(一个问题!))
以供参考:
- 一个蚂蚁bug报告
- 一个Java的不-A-bug报告
如果设置fork
为“无”,同样VM将被使用,所以杀蚂蚁过程中会过于杀死这个特定的Java程序。
杀死进程的跨平台解决方案将涉及一点努力。 见的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)。