-->

在Java中捕获按Ctrl + C(Catching Ctrl+C in Java)

2019-08-31 15:02发布

是否有可能赶上在Java命令行应用程序的Ctrl + C 信号? 我想终止程序之前清理一些资源。

Answer 1:

您可以将关闭钩子 ,向四周运行VM每当VM关闭:

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

  • 在程序正常退出,当最后一个非守护线程退出时或者当(等同于System.exit)方法被调用的出口处,或

  • 虚拟机被终止在响应于用户中断,如输入Ctrl + C,或一个全系统的事件,如用户注销或系统关闭。

你传递的关闭钩子线程必须遵循一些规则,但是,一定要仔细阅读所链接的文档,以避免出现任何问题。 这包括确保线程安全,线程的快速终止等

此外,作为评论者加斯帕指出,关闭挂钩,保证虚拟机上的正常关机运行,但如果VM进程被强制终止他们不这样做。 如果本机代码搞砸了,或者如果你强行杀死进程可能发生这种情况( kill -9taskkill /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