我创建了一个 Ant 任务来编译 VB6 应用程序。
在对源文件进行一些预处理之后,我从VB6.exe
适当的参数开始使用
Process p = Runtime.getRuntime().exec(...);
p.waitFor();
但是,当我在 Ant 运行时按 Ctrl+C 时,脚本和我的任务会终止,但生成的进程仍在运行。
当 Ant 脚本终止时,如何自动终止我启动的进程?如果我按 Ctrl+C 会发生什么?我的任务是立即终止还是有什么反应?
我创建了一个 Ant 任务来编译 VB6 应用程序。
在对源文件进行一些预处理之后,我从VB6.exe
适当的参数开始使用
Process p = Runtime.getRuntime().exec(...);
p.waitFor();
但是,当我在 Ant 运行时按 Ctrl+C 时,脚本和我的任务会终止,但生成的进程仍在运行。
当 Ant 脚本终止时,如何自动终止我启动的进程?如果我按 Ctrl+C 会发生什么?我的任务是立即终止还是有什么反应?
Runtime.exec()
在单独的操作系统进程中运行命令。当您按下 Ctrl+C 时,您会终止 Java 进程。
你可以试试Runtime.addShutdownHook(Thread hook)
。当您按下 Ctrl+C 时 JVM 正在关闭时,将调用此钩子线程。实现钩子线程,它将尝试终止您启动的进程。要终止该进程,您需要找出该操作系统上的命令并在Runtime.exec()
.
您可能对此代码感兴趣:
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)
或系统范围的事件(例如用户注销或系统关闭)而终止。