在Java中捕获Ctrl + C
是否有可能在java命令行应用程序中捕获Ctrl + C信号? 我想在终止程序之前清理一些资源。
您可以将closures挂钩附加到VMclosures时运行的VM:
Java虚拟机响应两种事件closures:
程序正常退出,最后一个非守护进程线程退出或退出(等效于System.exit)方法被调用时,或
响应用户中断(如键入Ctrl + C )或系统范围的事件(如用户注销或系统closures)而终止虚拟机。
您作为关机钩传递的线程必须遵循几个规则,所以请仔细阅读链接的文档以避免任何问题。 这包括确保线程安全性,线程的快速终止等。
而且,正如评论者Jesper指出的那样,closures挂钩保证在虚拟机正常closures的情况下运行,但是如果虚拟机进程被强制终止,则不会。 这可能会发生,如果本地代码拧紧或如果你强行杀死进程( kill -9
, taskkill /f
)。
但是在这些情况下,所有的赌注都无济于事,所以我不会浪费太多的思考。
只是为了快速进行控制台testing…
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(); } } });