Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用程序处于“关闭”状态时的任何关闭挂钩;强制关闭;?_Java_Process_Shutdown Hook - Fatal编程技术网

Java 应用程序处于“关闭”状态时的任何关闭挂钩;强制关闭;?

Java 应用程序处于“关闭”状态时的任何关闭挂钩;强制关闭;?,java,process,shutdown-hook,Java,Process,Shutdown Hook,如果用户强制java关闭(通过任务管理器或关闭相应的批处理文件),有没有办法让程序通过关闭钩子 我的程序目前运行和执行良好,如果用户关闭GUI,它将通过一系列步骤与数据库断开连接。但是,如果用户关闭Java或批处理文件(与GUI并排运行),则与数据库的连接不会关闭 是否可能以某种方式强制关闭连接,甚至从表中删除某些内容?当我jar程序时,批处理文件可能不会成为问题,但进程仍然会成为问题。否 关闭钩子将对Ctrl+C、正常关闭、用户注销和正常系统关闭(要求所有应用程序正常关闭)做出反应 然而,如果

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

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

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

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

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

在测试中启动的应用程序(如服务器软件)应在控制台/命令行上运行,并按Ctrl+C停止程序(将运行关机挂钩),而不是使用任务管理器或KILL-9


此外,如果Java愿意的话,它甚至无能为力。强制关闭发生在操作系统级别,此时它会释放正在使用的内存、文件和I/O句柄等。Java(或任何其他程序)无法控制强制关闭。在这一点上,操作系统负责了。

是的,我知道,但是有没有其他方法可以确保这一点,通过另一个程序或并行运行的东西。例如,像病毒一样,如果强制关闭,它们就会重新打开。显然我没有制造病毒,只是在退出之前关闭了数据库。+1用于指出终止发生在操作系统级别。@Cody,您的数据库服务器应该在超时后关闭连接。对于数据库中的任何临时或工作数据,请尝试使用事务。监视进程只是一个兔子洞。你可能会把一些东西拼凑在一起(比如监视正在运行的进程列表,并使用终止来触发反应),但我想指出的是,按设计,强制关闭是一条死胡同。你不想做的事情是试图绕过,或者对接近的力做出反应。这是一种接近的力量。就像死亡一样,它也是生命的一部分,试图与之抗争只会让你走上与OS/应用程序生命周期应该运行的方式抗争的道路。提出这一问题的大多数问题都不能完全理解这一现实。我能想到的这类行为的唯一例外(可能还有其他例外)是软件/基础设施监控系统,设计用于监视强制关闭/崩溃,并因此执行一些自动化任务(例如重新启动服务、向管理员发送通知等)。