无法在java命令行程序中捕获中断

时间:2012-08-22 22:13:09

标签: java multithreading interrupt

  

可能重复:
  Java: How could I “intercept” Ctrl+C in a CLI application?

在Windows上,我启动了一个执行任务的java non gui应用程序 然后按CNTL-C并且程序退出,我的中断处理代码似乎都没有触发,即使在main方法中放置try / catch也从不显示堆栈跟踪以指示它已被中断。

public static void main(final String[] args) throws Exception
{
    try
    {
         CmdLineDecoder cld = new CmdLineDecoder();
         cld.start(args);
         System.exit(0);
    }
    catch(Exception e)
    {
         e.printStackTrace();
        throw e;
    }
}

我显然误解了Cntl-C的影响,但是什么?

1 个答案:

答案 0 :(得分:2)

您无法在java中执行常规信号处理,但可以处理 Ctrl-c

如果您需要在VM关闭时执行某些操作,请使用关闭挂钩:Runtime.addShutdownHook

来自文档:

  

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

     

当最后一个非守护程序线程退出或调用exit(等效,System.exit)方法时,程序正常退出,或者

     

虚拟机终止以响应用户中断,例如键入^ C或系统范围的事件,例如用户注销或系统关闭。

我以前在Windows / OSX上使用过它。