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

Cod*_*ody 3 java process shutdown-hook

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

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

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

jef*_*unt 6

不.

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

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

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

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

  • +1表示终止发生在OS级别. (2认同)