当我在后台运行Java进程并关闭计算机(ArchLinux),计算机会等待一些时间来终止我在Java中的shutdown-hook吗?
如果你想在系统关闭时做一些操作,你需要添加一个 shutdown-hook(假设你已经这样做了):
Runtime.getRuntime().addShutdownHook(
new Thread(new Runnable() {
@Override
public void run() {
// This method will be executed and Virtual Machine will close when this method will return
}
}));
Runtime.halt()
也将防止运行挂钩。当用户关闭计算机(非拔插)时,计算机向JVM发送关闭命令,将执行关闭挂钩,尽管如果拔掉电源,计算机将没有任何时间做任何事情,更不用说发出命令给JVM了。
我记得在某个地方读到过(但我找不到链接了)-它说关闭挂钩不应该花费太多时间来执行,否则Windows可能会在系统想要关闭时杀死它。这表明如果您决定通过操作系统关闭系统,则将运行关闭挂钩。
总之,这取决于直接断电或操作系统崩溃的情况下,它们将不会运行。正常的操作系统关闭将运行钩子,尽管如果它们花费的时间太长,操作系统可能会在它们完成之前关闭它们。这段内容来自javadoc。
当虚拟机因用户注销或系统关机而终止时,底层操作系统可能只允许一定的时间来关闭和退出。因此,在关机钩子中不建议尝试进行任何用户交互或执行长时间运行的计算。
这表明当操作系统想要关闭时将运行钩子,但建议不要花费太长时间,否则它们可能会被强制终止。