【问题标题】:JAVA: how to call a method when the process has been stopped (is it even possible?)JAVA:当进程停止时如何调用方法(甚至可能吗?)
【发布时间】:2009-07-16 04:40:13
【问题描述】:

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

请告诉我。

【问题讨论】:

标签: java shutdown


【解决方案1】:

Here is a pretty good guide to signal handling in Java。它还涵盖了关闭和终止情况,包括 Ctrl-C。

您想要的特定调用在运行时,addShutdownHook

仍有一些您无法处理的特定情况...通常某种操作系统可以直接杀死应用程序而不给它自救的机会。您不能通过这种机制涵盖所有情况。引用 JavaDoc

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

【讨论】:

  • 这可能很明显,但我仍然有义务指出,如果进程被强制终止(Unix 中的 SIGKILL,Windows 中的taskkill /f),它就无法检测到事实或做任何事物。它只是当场死去,除非它处于不间断的睡眠中(如果是,它会在离开该状态后立即死亡)。
  • 当然,它的功能就像我们在 Oracle 中的“关闭中止”。一个人无能为力,也不应该提供帮助,因为克服这一点类似于撤销用户权利,IMO。
  • 该指南的链接已损坏。我认为这篇文章的 pdf 位于 public.dhe.ibm.com/software/dw/java/i-signalhandling-pdf.pdf
猜你喜欢
  • 2018-10-11
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多