JAVA:当进程停止时如何调用方法(甚至可能吗?)

发布于 2024-07-27 13:54:38 字数 129 浏览 4 评论 0原文

我希望这样,当我的用户从命令行启动我的程序,然后终止进程(例如 ctrl+c)时,程序将通过关闭其所有连接来正常关闭。 这可能吗? 我不能像 GUI 那样在关闭时调用一个方法吗? 该程序没有 GUI。

请告诉我。

I want it so when my users start my program from the command line and then kill the process (ctrl+c, for example) the program will shutdown gracefully by closing all its connections. Is this even possible? I can't just have it call a method upon closing like a GUI can? This program has no GUI.

Please let me know.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深者入戏 2024-08-03 13:54:38

这里是关于 Java 信号处理的非常好的指南。 它还涵盖关闭和终止情况,包括 Ctrl-C。

您想要的具体调用是在运行时中, addShutdownHook

仍然存在您无法处理的特定情况...通常某种操作系统可以通过某种方式直接终止应用程序而不给它自我保存的机会。 通过这种机制你无法覆盖所有情况。 引用JavaDoc

在极少数情况下,虚拟机可能会中止,即停止运行而不完全关闭。 当虚拟机从外部终止时会发生这种情况,例如使用 Unix 上的 SIGKILL 信号或 Microsoft Windows 上的 TerminateProcess 调用。 如果本机方法出现错误,例如损坏内部数据结构或尝试访问不存在的内存,则虚拟机也可能中止。 如果虚拟机中止,则无法保证是否会运行任何关闭挂钩。

Here is a pretty good guide to signal handling in Java. It covers shutdown and termination cases as well, including Ctrl-C.

The specific call you want is in the Runtime, addShutdownHook.

There are still specific cases that you cannot handle... there is usually some way for the OS to just outright kill the application without giving it a chance to save itself. You can't cover every case through this mechanism. To quote the JavaDoc

In rare circumstances the virtual machine may abort, that is, stop running without shutting down cleanly. This occurs when the virtual machine is terminated externally, for example with the SIGKILL signal on Unix or the TerminateProcess call on Microsoft Windows. The virtual machine may also abort if a native method goes awry by, for example, corrupting internal data structures or attempting to access nonexistent memory. If the virtual machine aborts then no guarantee can be made about whether or not any shutdown hooks will be run.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文