是否可以在Java命令行应用程序中捕获Ctrl+ C信号?我想在终止程序之前清理一些资源。
Ctrl
C
您可以将关闭挂钩连接到VM,只要VM关闭,该挂钩便会运行:
Java虚拟机将响应以下两种事件而关闭: 当最后一个非守护程序线程退出时,或者调用exit(等效于System.exit)方法时,程序将正常退出,或者 响应于用户中断(例如键入Ctrl+ C)或系统范围的事件(例如用户注销或系统关闭)来终止虚拟机。
Java虚拟机将响应以下两种事件而关闭:
当最后一个非守护程序线程退出时,或者调用exit(等效于System.exit)方法时,程序将正常退出,或者
响应于用户中断(例如键入Ctrl+ C)或系统范围的事件(例如用户注销或系统关闭)来终止虚拟机。
但是,您作为关闭挂钩传递的线程必须遵循多个规则,因此请仔细阅读链接的文档,以避免出现任何问题。这包括确保线程安全,线程的快速终止等。
另外,正如评论者Jesper指出的那样,可以确保关闭挂钩在VM正常关闭时运行,但是如果VM进程被强行终止,则不会。如果本机代码搞砸了,或者您强行终止了该进程()kill -9,则可能会发生这种情况taskkill /f。
kill -9
taskkill /f
但是在那种情况下,所有的赌注都没有,所以我不会在此浪费太多的思考。