首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何终止由Ant启动的失控Java进程?

如何终止由Ant启动的失控Java进程?
EN

Stack Overflow用户
提问于 2012-06-11 17:38:38
回答 3查看 5K关注 0票数 3

如果我从ant脚本启动一个派生的java进程并终止ant进程,它不会终止java进程。无论是从IDE还是从命令行运行,都会出现这种情况。

代码语言:javascript
代码运行次数:0
运行
复制
<target name="myTarget" >
  <java classname="path.to.MyClass" 
        fork="yes" 
        failonerror="true" 
        maxmemory="128M">
    <classpath refid="run" />
  </java>
</target>

有没有办法将它们联系起来,这样杀死ant进程就会杀死java进程?

我看过下面的Q&A --但这篇文章的重点似乎是如何手动终止java进程。我不想这样做,因为我还有许多其他的java应用程序在运行,并且在TaskManager中找到合适的java.exe进程并不总是那么简单。

EN

回答 3

Stack Overflow用户

发布于 2013-11-29 18:07:20

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

当Ant任务终止时,派生的Java进程关闭钩子不会触发。(这似乎是从Java 1.4 (!)开始就存在的问题)

供参考:

Ant bug report

票数 2
EN

Stack Overflow用户

发布于 2012-06-11 17:52:03

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

票数 1
EN

Stack Overflow用户

发布于 2012-06-11 23:23:06

一个用于杀死进程的跨平台解决方案需要一些工作。参见Java tool/method to force-kill a child process

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

代码语言:javascript
代码运行次数:0
运行
复制
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的帮助模式中列出的属性:

代码语言:javascript
代码运行次数:0
运行
复制
wmic process get /?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10977619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档