【问题标题】:How to kill Ant program spawned from within java如何杀死从java中产生的Ant程序
【发布时间】:2012-07-18 20:53:20
【问题描述】:

从 Windows 中销毁生成的 ant 进程不起作用。 Unix 变体这工作正常,但在 Windows 上这不起作用。代码 sn-p 如下。虽然返回码是正确的 (1) 生成的进程继续执行直到完成。只是windows上的问题。有什么想法吗?

        ProcessBuilder build = new ProcessBuilder();
    List<String> list = build.command();
    list.add("cmd");
    list.add("/C");
    list.add("ant");
    list.add("-f");
    list.add("HelloWorld.xml");

    try {
        Process p = build.start();          
        Thread.sleep(5000);
        p.destroy();        
        int i = p.waitFor();
        System.out.println(i);
    } catch (Exception e) {
        System.out.println(e);
    }

【问题讨论】:

    标签: java windows ant processbuilder


    【解决方案1】:

    问题是Process.destroy 不会杀死进程孙子进程。自 2002 年以来,有一个 bug 为其开放。

    不管怎样,你为什么要用cmd /c start 生成一个新的提示来调用Ant?如果这不是必需的,请致电ant.bat -f HelloWorld.xml

    更新

    ant.bat will 也产生子进程。有一个workaround with taskkill 可能会有所帮助。

    【讨论】:

    • 谢谢安东尼。实际上,我以前尝试过,但它不起作用,也不起作用,就像你的例子一样。我确实发现,如果我附加了正确的文件扩展名,使用您的示例,代码确实有效,即“ant.bat -f HelloWorld.xml”。
    • 你是对的,包括文件扩展名(我已经更新了答案)。此外,对于不在 PATH 变量中的程序,您需要使用完整路径或相对路径来调用它。
    • 实际上在进一步测试这不起作用:(产生的蚂蚁进程仍在后台运行......
    【解决方案2】:

    通过混合使用 wmic(获取 Windows 进程列表)和 taskkill(强制终止正在运行的进程)来解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 2013-12-10
      相关资源
      最近更新 更多