如果脚本被取消,如何终止从Ant任务启动的进程?

时间:2009-04-17 07:36:29

标签: ant process copy-paste

我已经创建了一个Ant任务来编译VB6应用程序。

在对源文件进行一些预处理之后,我使用

使用适当的参数启动VB6.exe
Process p = Runtime.getRuntime().exec(...);
p.waitFor();

但是当我在Ant运行时按Ctrl + C时,脚本和我的任务终止,但生成的进程仍在运行。

如何在Ant脚本终止时自动终止我启动的进程? 如果按Ctrl + C会发生什么?我的任务是立即被杀死还是有某种反应方式?

2 个答案:

答案 0 :(得分:1)

Runtime.exec()在单独的OS进程中运行该命令。当您按Ctrl + C时,您将终止Java进程。

您可以尝试Runtime.addShutdownHook(Thread hook)。当您按Ctrl + C关闭JVM时,将调用此挂钩线程。实现将尝试终止您启动的进程的钩子线程。要终止该过程,您需要在该操作系统上找到该命令并在Runtime.exec()中使用该命令。

答案 1 :(得分:1)

您可能对此代码感兴趣:

    final Process process = new ProcessBuilder("blah blah").start();
    Runtime.getRuntime().addShutdownHook(new Thread() {

        @Override
        public void run() {
            process.destroy();
        }

    });
    process.waitFor();

addShutdownHook

的javadoc
  

Java虚拟机关闭以响应两种事件:

     
      
  • 当最后一个非守护程序线程退出或退出时,程序正常退出   (等效地,System.exit)方法被调用,或
  •   
  • 虚拟机响应用户中断而终止,例如键入^ C,
      或系统范围的事件,例如用户注销或系统关闭。
  •