首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中捕获Ctrl + C

在Java中捕获Ctrl + C
EN

Stack Overflow用户
提问于 2018-03-21 02:10:22
回答 2查看 0关注 0票数 0

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

EN

回答 2

Stack Overflow用户

发布于 2018-03-21 10:21:59

您可以将关闭挂接附加到VM关闭时运行的VM:

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

  • 程序正常退出时,最后一个非守护进程线程退出或退出(等效地,System.exit)方法被调用时,或者
  • 响应用户中断(如键入Ctrl+ C)或系统范围事件(如用户注销或系统关闭)终止虚拟机。

但是,作为关闭钩子传递的线程必须遵循几条规则,因此请仔细阅读链接文档以避免任何问题。这包括确保线程安全,线程的快速终止等。

另外,正如Jesper指出的那样,关闭挂钩保证在虚拟机正常关闭的情况下运行,但如果虚拟机进程强行终止,则不会。如果原生代码出现故障或者您强行终止进程(kill -9taskkill /f),则可能发生这种情况。

但是在这些情况下,所有的赌注都无济于事,所以我不会浪费太多的思考。

票数 0
EN

Stack Overflow用户

发布于 2018-03-21 12:04:55

仅用于快速控制台测试目的...

代码语言:javascript
复制
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();
            }
        }
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档