java线程基础巩固---如何给你的应用程序注入钩子程序
这次做一个比较有意思的实验,我们知道当一个程序如果抛异常了其程序肯定会挂掉,那有木有可能在程序异常退出时能执行一段咱们自己的代码,比如说服务器在异常退出时需要做一些额外的资源清理,像这种场景就正好是这里有实验的,下面开始,因为这个实验用shell命令演示会比较方便,所以建议实验是在linux、mac系统下,windows上木有这么方便。
首先新建一个java类:
比较简单,就是有一个死循环来模拟程序在工作,编译运行:
咱们可以将这个程序放到后台去运行,不至于阻塞终端:
然后此时的运行结果就都输出到了"nohup.out"这个日志文件了,可以通过如下命令去查看:
那如果此时用kill命令将咱们这个程序给杀掉,杀掉之后咱们目前程序是没有任何处理的,如下:
而如果是程序出现了异常那咱们的程序也就直接挂掉了,咱们来改一下程序:
编译运行:
接下来给程序加入一个钩子,当进程死掉之后可以执行咱们的一段逻辑,具体做法如下:
编译运行:
很显然这次当程序抛异常导致程序挂掉之后就正常执行了咱们预期的程序,这也就是钩子程序的作用,那下面再来试验一下如果用kill命令手动去杀那依然可以执行钩子程序么,先将异常给注释掉:
再来编译运行:
嗯~~正常被执行了,但是kill -9就不一样了,下面演示一下:
很显然这次程序就直接挂掉了,因为kill -9属于强杀,对于这种情况咱们的钩子程序是不管用的,所以对于服务器的管理人员杀掉程序时一般是非常忌讳用kill -9的。