3

如果我从 ant 脚本启动分叉的 java 进程并终止 ant 进程,它不会终止 java 进程。无论是从 IDE 还是从命令行运行它都是如此。

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

有没有办法把这些联系起来,让杀ant进程就杀java进程?

我看过以下问答- 但这似乎侧重于如何手动终止 java 进程。我不想这样做,因为我有许多其他 java 应用程序正在运行,并且在 TaskManager 中找到要杀死的正确 java.exe 进程并不总是直截了当的。

4

3 回答 3

2

不幸的是,这似乎是一个长期存在的已知问题。

当 Ant 任务终止时,不会触发分叉的 Java 进程关闭挂钩。(这似乎是自 Java 1.4 以来的一个问题(!))

以供参考:

于 2013-11-29T10:07:19.857 回答
1

如果设置fork为“no”,将使用相同的 VM,因此杀死 ant 进程也会杀死这个特定的 java 进程。

于 2012-06-11T09:52:02.707 回答
0

杀死进程的跨平台解决方案将涉及一些工作。请参阅强制终止子进程的 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 命令来查找path.to.MyClass在命令行中某处具有的任何正在运行的 java*.exe 进程的进程 ID。如果您需要 WMIC 更具体地匹配您的特定 Java 进程,请使用 WMIC 帮助模式列出的属性:

wmic process get /?

taskkill将在给定根进程 ID (/PID) 的情况下杀死进程树 (/T)。

于 2012-06-11T15:23:05.553 回答