我想要它,所以当我的用户从命令行启动我的程序然后终止进程(例如,ctrl+c)时,程序将通过关闭其所有连接来正常关闭。这甚至可能吗?我不能让它像 GUI 一样在关闭时调用一个方法吗?该程序没有图形用户界面。
请告诉我。
这是一个很好的 Java 信号处理指南。它还涵盖了关闭和终止情况,包括 Ctrl-C。
您想要的特定调用在运行时addShutdownHook中。
仍然存在您无法处理的特定情况......操作系统通常有一些方法可以直接杀死应用程序而不给它一个自救的机会。您不能通过这种机制涵盖所有情况。引用 JavaDoc
在极少数情况下,虚拟机可能会中止,即在没有完全关闭的情况下停止运行。当虚拟机在外部终止时会发生这种情况,例如在 Unix 上使用 SIGKILL 信号或在 Microsoft Windows 上使用 TerminateProcess 调用。如果本地方法出错,例如破坏内部数据结构或尝试访问不存在的内存,虚拟机也可能中止。如果虚拟机中止,则无法保证是否会运行任何关闭挂钩。