1

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

在对源文件进行一些预处理之后,我从VB6.exe适当的参数开始使用

Process p = Runtime.getRuntime().exec(...);
p.waitFor();

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

当 Ant 脚本终止时,如何自动终止我启动的进程?如果我按 Ctrl+C 会发生什么?我的任务是立即终止还是有什么反应?

4

2 回答 2

1

Runtime.exec()在单独的操作系统进程中运行命令。当您按下 Ctrl+C 时,您会终止 Java 进程。

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

于 2009-04-17T08:12:20.217 回答
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 虚拟机关闭以响应两种事件:

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