Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何杀死java中产生的Ant程序_Java_Windows_Ant_Processbuilder - Fatal编程技术网

如何杀死java中产生的Ant程序

如何杀死java中产生的Ant程序,java,windows,ant,processbuilder,Java,Windows,Ant,Processbuilder,从windows销毁生成的ant进程不起作用。Unix变体这可以正常工作,但在windows中不起作用。下面是代码片段。当返回代码正确时(1),生成的进程将继续执行,直到完成。只有windows上的问题。有什么想法吗 ProcessBuilder build = new ProcessBuilder(); List<String> list = build.command(); list.add("cmd"); list.add("/C");

从windows销毁生成的ant进程不起作用。Unix变体这可以正常工作,但在windows中不起作用。下面是代码片段。当返回代码正确时(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);
    }
ProcessBuilder build=newprocessbuilder();
List=build.command();
添加(“cmd”);
列表。添加(“/C”);
列表。添加(“ant”);
列表。添加(“-f”);
添加(“HelloWorld.xml”);
试一试{
进程p=build.start();
睡眠(5000);
p、 破坏();
int i=p.waitFor();
系统输出打印LN(i);
}捕获(例外e){
系统输出打印ln(e);
}

问题在于
进程.destroy
不会杀死进程的子进程。自2002年以来,有一个专门为它开放的网站

无论如何,为什么要用
cmd/cstart
生成一个新的提示符来调用Ant?如果这不是一个要求,只需调用
ant.bat-f HelloWorld.xml

更新


ant.bat也将生成子进程。有一个可能会有所帮助。

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

谢谢Anthony。事实上,我以前试过,但它不起作用,也不起作用,就像你的例子一样。我确实发现,如果我使用您的示例附加了正确的文件扩展名,那么代码确实有效,即“ant.bat-f HelloWorld.xml”。关于包含文件扩展名,您是对的(我已经更新了答案)。另外,对于不在
PATH
变量中的程序,您需要使用完整路径或相对路径调用它。实际上,在进一步测试时,这不起作用:(生成的ant进程仍在后台运行。。。