应用程序“强制关闭”时是否有任何关机挂钩?

时间:2011-11-02 00:35:12

标签: java process shutdown-hook

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

我的程序当前运行并且执行良好,如果用户关闭GUI,则它会通过一组步骤断开与数据库的连接。但是,如果用户关闭Java或批处理文件(与GUI并行运行),则不会关闭与数据库的连接。

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

1 个答案:

答案 0 :(得分:6)

不。

关闭挂钩将响应Ctrl + C,正常关闭,用户注销和正常系统关闭(请求正常关闭所有应用程序)。

然而,如果有人强行关闭应用程序,则认为这是您真正想要的 - 立即终止,无需另行通知。这个问题已被多次询问,并且被许多应用程序的行为所困惑,当它们被要求强制关闭时,它们实际上需要很长时间才能最终终止。这是因为在OS努力释放所有资源时,一些资源(特别是某些I / O和/或文件资源)不会立即释放。

在测试启动的应用程序,并且打算在正常关闭之前运行(例如服务器软件),您应该在控制台/命令行运行它,然后按Ctrl + C停止程序(将运行关闭挂钩)而不是使用任务管理器或KILL -9。

此外,如果想要的话,Java甚至都无法做到。在OS级别发生强制关闭,此时它会释放正在使用的内存,文件和I / O句柄等.Java不会(也没有任何其他程序)控制强制关闭。此时,操作系统正在掌控。