是否有可能赶上在Java命令行应用程序的Ctrl + C 键信号? 我想终止程序之前清理一些资源。
Answer 1:
您可以将关闭钩子 ,向四周运行VM每当VM关闭:
Java虚拟机关闭响应两种事件:
在程序正常退出,当最后一个非守护线程退出时或者当(等同于System.exit)方法被调用的出口处,或
虚拟机被终止在响应于用户中断,如输入Ctrl + C,或一个全系统的事件,如用户注销或系统关闭。
你传递的关闭钩子线程必须遵循一些规则,但是,一定要仔细阅读所链接的文档,以避免出现任何问题。 这包括确保线程安全,线程的快速终止等
此外,作为评论者加斯帕指出,关闭挂钩,保证虚拟机上的正常关机运行,但如果VM进程被强制终止他们不这样做。 如果本机代码搞砸了,或者如果你强行杀死进程可能发生这种情况( kill -9
, taskkill /f
)。
不过,在这些场景中所有的赌注都关闭,无论如何,所以我不会在这上面花太多心思。
Answer 2:
只是为了快速控制台测试目的...
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
try {
Thread.sleep(200);
System.out.println("Shouting down ...");
//some cleaning up code...
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
文章来源: Catching Ctrl+C in Java