我已经创建了一个Ant任务来编译VB6应用程序。
在对源文件进行一些预处理之后,我使用
使用适当的参数启动VB6.exe
Process p = Runtime.getRuntime().exec(...);
p.waitFor();
但是当我在Ant运行时按Ctrl + C时,脚本和我的任务终止,但生成的进程仍在运行。
如何在Ant脚本终止时自动终止我启动的进程? 如果按Ctrl + C会发生什么?我的任务是立即被杀死还是有某种反应方式?
答案 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 :
的javadocJava虚拟机关闭以响应两种事件:
- 当最后一个非守护程序线程退出或退出时,程序正常退出 (等效地,System.exit)方法被调用,或
- 虚拟机响应用户中断而终止,例如键入^ C,
或系统范围的事件,例如用户注销或系统关闭。