Java 如何判断程序何时终止?

Java 如何判断程序何时终止?,java,command-line,exit,Java,Command Line,Exit,因此,我正在开发一个命令行服务器程序,该程序必须处理用户统计数据和其他数据,我有一个命令来停止服务器并将用户统计数据和数据保存到一个文件中。我想知道的是,当服务器终止时,是否有一种方法可以在不使用stop命令的情况下保存用户统计信息和数据。我尝试创建一个新进程并查找进程何时终止,但它没有告诉我服务器何时终止。有什么解决办法吗?我想你说的是这样一种情况:有人用Ctrl+C操作程序,或者以意外的方式终止程序。我所知道的处理这种情况的最好方法是使用 从文件中: 当虚拟机开始其关闭序列时,它将以未指定的

因此,我正在开发一个命令行服务器程序,该程序必须处理用户统计数据和其他数据,我有一个命令来停止服务器并将用户统计数据和数据保存到一个文件中。我想知道的是,当服务器终止时,是否有一种方法可以在不使用stop命令的情况下保存用户统计信息和数据。我尝试创建一个新进程并查找进程何时终止,但它没有告诉我服务器何时终止。有什么解决办法吗?

我想你说的是这样一种情况:有人用
Ctrl+C
操作程序,或者以意外的方式终止程序。我所知道的处理这种情况的最好方法是使用

从文件中:

当虚拟机开始其关闭序列时,它将以未指定的顺序启动所有已注册的关闭挂钩,并让它们同时运行

但这可能对您不起作用,因为正如文档中所述:

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


我假设您所说的是一种情况,即有人
Ctrl+C
执行程序,或者以意外的方式终止程序。我所知道的处理这种情况的最好方法是使用

从文件中:

当虚拟机开始其关闭序列时,它将以未指定的顺序启动所有已注册的关闭挂钩,并让它们同时运行

但这可能对您不起作用,因为正如文档中所述:

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


如果JVM正常终止,则可以使用。如果JVM正常终止,则可以使用