确定 java shutdown hook 线程内的退出状态
我想确定关闭挂钩运行时进程的退出状态。
我想要一个基于状态代码(0 或非零)的逻辑
(例如:如果为零则不执行其他操作,非零则发送警报电子邮件)
您知道我如何获取此信息吗?
I would like to determine the exit status of the process during the shutdown hook runtime.
I want to have a logic which is based on the status code (0 or nonzero)
(ex: if zero do nothing else nonzero send an alert email)
Do you know how I can get this information?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我尝试覆盖
SecurityManager
checkExit(int status)
方法 - 如果在任何地方显式调用System.exit(status)
,则此方法有效 - 但是,当应用程序“正常”退出(无活动线程)或错误杀死虚拟机时,它不会设置状态。I tried to override the
SecurityManager
checkExit(int status)
method - this works ifSystem.exit(status)
is called anywhere explicitly - however, it doesn't set the status when the application exits "normally" (no active threads), or an error kills the VM.下面是一些示例代码,其中使用专用类通过调用
doExit(int)
来启动System.exit
调用。该类还存储退出状态并随后充当关闭挂钩。Here is some example code whereby a dedicated class is used to initiate a
System.exit
call via a call todoExit(int)
. The class also stores the exit status and subsequently acts as a shut-down hook.为什么在应用程序本身中这样做?如果您的应用程序不发送电子邮件作为正常操作的一部分,那么合并这种功能并不是一个好主意,恕我直言。
我只是相信从 JVM 进程设置适当的返回值,并让 shell 脚本或其他脚本负责有条件地创建电子邮件。
关闭挂钩应该只运行很短的时间,发送电子邮件可能会花费相当长的时间。
Why do this in the application itsellf? If your application is not sending a e-mails as part of normal operations, incorporating this kind of functionality is not a good idea, IMHO.
I would just trust to setting an appropriate return value from the JVM process and let a shell script or whatever take care of the conditional creation of the e-mail.
Shutdownhooks are supposed to run for a short time only, sending an e-mail could consume quite some time.
您必须将
main
中的退出状态保存到全局(public static
)变量中。You must save the exit status in
main
into a global (public static
) variable.