"Force Closed"应用程序时是否有关闭钩子?



如果用户强制java关闭(通过任务管理器或通过关闭相应的批处理文件),是否有办法使程序通过shutdown钩子?

我的程序目前运行和执行得很好,如果用户关闭GUI,那么它将经历一系列步骤来断开与数据库的连接。但是,如果用户关闭Java或批处理文件(与GUI并行运行),则不会关闭与数据库的连接。

是否有可能以某种方式强制连接关闭,甚至可能从表中删除某些内容?批处理文件可能不会是一个问题,当我jar程序,但进程终止仍然会。

关机钩子将对Ctrl+C、正常关闭、用户注销和正常系统关闭(这要求优雅地关闭所有应用程序)作出反应。

然而,如果有人强行关闭应用程序,它假定这是你真正想要的-立即终止,没有进一步的通知。这个问题已经被问过很多次了,并且被许多应用程序的行为所迷惑,当它们被要求强制关闭时,它们实际上需要很长时间才能最终终止。这是因为在操作系统努力释放所有资源的过程中,有些资源(特别是某些I/O和/或文件资源)不会立即释放。

在测试一个应用程序启动,并打算运行,直到一个优雅的关闭(例如服务器软件),你应该在控制台/命令行运行它,并按Ctrl+C停止程序(这将运行关机钩子),而不是使用任务管理器,或KILL -9。

而且,即使Java想这样做,它也无能为力。强制关闭发生在操作系统级别,此时它会释放正在使用的内存、文件和I/O句柄等。Java没有(其他程序也没有)控制强制关闭。在这一点上,操作系统是负责的。

最新更新