java - 如何以与平台无关的方式终止由ant exec启动的java进程?

标签 java ant jvm

我有以下 build.xml 代码,它使用 exec 在 Windows 和 mac 上启动一个 java 进程(取决于您运行此 build.xml 的操作系统),我想通过 java 杀死这些子进程(如果当我杀死执行此 build.xml 的父进程时它们被杀死,那就太好了)?

注意:antRunAsync.js 用于运行 exe 文件,antRunAsync.sh 用于运行 jar 文件。

Build.xml>>>

<target name="runscript.windows">
        <echo>This is a Windows machine.</echo>
    <exec executable="cscript.exe">
               <arg value="//NoLogo" />
               <arg value="antRunAsync.js" />  <!-- this script -->
               <arg value="${projectName}.exe" />
               <arg line="${savedTestName}"/>
            </exec>

    </target>

    <target name="runscript.mac">
        <echo>This is an Mac machine.</echo>
        <exec dir="." executable="/bin/sh">
            <arg value="./antRunAsync.sh" />
            <arg value="${projectName}.jar" />
            <arg line="${savedTestName}"/>
        </exec>
    </target>

antRunAsync.js >>>

var WshShell = WScript.CreateObject("WScript.Shell");
var exeStr = "%comspec% /c";
var arg = "";
var windowStyle = 0;
var WshProcessEnv = WshShell.Environment("PROCESS");
var windowTitle = WshProcessEnv("ANTRUN_TITLE");
var outputFile = WshProcessEnv("ANTRUN_OUTPUT");
var OS = WshProcessEnv("OS");
var isWindowsNT = (OS == "Windows_NT");

// Loop through arguments quoting ones with spaces
for (var i = 0; i < WScript.Arguments.count(); i++) {
arg = WScript.Arguments(i);
if (arg.indexOf(' ') > 0)
    exeStr += " \"" + arg + "\"";
else
    exeStr += " " + arg;
}

WScript.Echo(exeStr);

var stdin = WshShell.Exec(exeStr).StdOut;
var stdout = WScript.StdOut;

while (!stdin.AtEndOfStream) {
var str = stdin.ReadLine();
stdout.WriteLine("Line " + (stdin.Line - 1) + ": " + str);
}

antRunAsync.sh >>>

echo $1
echo $2
java -jar $1 $2 2>&1 | tee log.txt 

最佳答案

JMX 是一种选项,您可以使用它以独立于平台的方式终止 java 进程。请查看下面的链接。

Is it possible to programmatically close a Java process through JMX

如果您正在寻找一个选项,杀死 ant 进程会导致 java 进程终止,我不确定。

关于java - 如何以与平台无关的方式终止由ant exec启动的java进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37707968/

相关文章:

java - 如何从 JLabel 保存图像

blackberry - Phonegap 和 Blackberry WebWorks : build\StandardInstall does not exist

ant - 从 Ant 任务中获取对修改列表的引用

java - 如何配置GC不让世界停止?

使用的 Java 内存

java - Spring 表达式语言 - 确定是否定义了 servletContext 变量

Java:混合两个 WAV 文件而不引入噪音

java - GC 日志中的负期望幸存者大小

Java - 处理方法中的多个异常

gradle - 如何在Gradle(不包括xz tar文件)中使用ant-compress?