2011-11-02 89 views
3

如果用户强制java关闭(通过任务管理器或通过关闭相应的批处理文件),有什么方法可以使程序通过关闭挂钩?应用程序“强制关闭”时是否有任何关机挂钩?

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

是否有可能以某种方式强制关闭连接,甚至可能从表中删除某些东西?当我激活程序时,批处理文件可能不会成为问题,但进程仍然会被处理。

回答

6

没有。

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

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

在测试启动,旨在将运行,直到正常关机(如服务器软件),你应该在控制台/命令行运行一个应用程序,然后按Ctrl + C停止程序(这将运行关机挂钩)而不是使用任务管理器或KILL -9。另外,如果Java想要的话,Java甚至可以做任何事情。强制关闭发生在操作系统级别,在这一点上,它释放内存,文件和I/O句柄等。Java没有(也没有任何其他程序)能够控制强制关闭。此时,操作系统正在负责。

+0

Yah,我明白,但是有没有其他方法可以通过另一个程序或并行运行来确保这一点。例如,像病毒一样,如果强制关闭,他们就会重新开放。我没有明显感染病毒,只是退出之前的数据库关闭。 – Cody

+2

+1表示终止发生在操作系统级别。 –

+1

@Cody,你的数据库服务器应该在超时后关闭连接。至于数据库中的任何临时或工作数据,请尝试使用事务。监控过程的事情只是一个兔子洞。 –