一尘不染

在Java中捕捉Ctrl + C

java

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


阅读 348

收藏
2020-09-08

共1个答案

一尘不染

您可以将关闭挂钩连接到VM,只要VM关闭,该挂钩便会运行:

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

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

  • 响应于用户中断(例如键入Ctrl+ C)或系统范围的事件(例如用户注销或系统关闭)来终止虚拟机。

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

另外,正如评论者Jesper指出的那样,可以确保关闭挂钩在VM正常关闭时运行,但是如果VM进程被强行终止,则不会。如果本机代码搞砸了,或者您强行终止了该进程()kill -9,则可能会发生这种情况taskkill /f

但是在那种情况下,所有的赌注都没有,所以我不会在此浪费太多的思考。

2020-09-08