【发布时间】:2011-11-17 17:33:05
【问题描述】:
如果我像这样向我的 Java 程序的运行时添加 shutdown hook:
public class MyShutdownHook implements Runnable
{
@Override
public void run()
{
// Stuff I want executed anytime
// the program, Java, or the OS exits normally,
// crashes, or terminates unexpectedly for any reason.
}
}
// The in another method...
Runtime.getRuntime().addShutdownHook(new MyShutdownHook());
...那么有没有曾经在程序/Java/OS 正常退出、崩溃或意外终止时不会执行run() 方法的情况?如果是这样,什么情况下可以绕过Runtime 的关闭挂钩,为什么?
【问题讨论】:
-
永远不要忽视对您的计算机进行核攻击的可能性。
-
除了 javadoc 对它的工作原理的描述之外,您还想了解更多信息吗?
-
@Mark Peters: : ) 好笑的玩笑...但不要忘记 SIGKILL 几乎 是 一种原子武器; ) 在 Linux 和 OS X 上(这两个名字只是开发人员常用的两个 Unx-like)*kill -9 是 保证 立即终止进程并释放它的资源,毫无疑问。没有ShutDownHook。没什么。现在我同意:Java 进程不会看到 kill -9 和核攻击之间有任何区别; )