所以我正在开发一个必须处理用户统计信息和其他数据的命令行服务器程序,我有一个命令来停止服务器并将用户统计信息和数据保存到文件中。我想知道的是,如果在不使用stop命令的情况下终止服务器时,还有一种方法可以保存用户统计信息和数据。我尝试创建一个新进程并查找进程何时终止,但它没有告诉我何时终止服务器。有没有解决方案?
答案 0 :(得分:1)
我假设你在谈论某人Ctrl+C
是该程序的情况,或以意想不到的方式终止程序。我知道处理这种情况的最好方法是使用Shutdown Hook。
来自文档:
当虚拟机开始其关闭序列时,它将以某种未指定的顺序启动所有已注册的关闭挂钩并让它们同时运行
但是这有可能对你不起作用,因为文档也说:
在极少数情况下,虚拟机可能会中止,即停止运行而不会干净地关闭。当虚拟机在外部终止时会发生这种情况,例如Unix上的SIGKILL信号或Microsoft Windows上的TerminateProcess调用。如果本机方法因例如破坏内部数据结构或尝试访问不存在的内存而出错,则虚拟机也可能中止。如果虚拟机中止,则无法保证是否将运行任何关闭挂钩。