java注入+钩子_java线程基础巩固---如何给你的应用程序注入钩子程序

这次做一个比较有意思的实验,我们知道当一个程序如果抛异常了其程序肯定会挂掉,那有木有可能在程序异常退出时能执行一段咱们自己的代码,比如说服务器在异常退出时需要做一些额外的资源清理,像这种场景就正好是这里有实验的,下面开始,因为这个实验用shell命令演示会比较方便,所以建议实验是在linux、mac系统下,windows上木有这么方便。

首先新建一个java类:

38c0336966bbc5b3fbdaf3dc243dc325.png

8e4e7ceecab1db929072fd9d23c1c2ec.png

比较简单,就是有一个死循环来模拟程序在工作,编译运行:

d725ea5eca9482490f292c1d6e3d7bde.png

咱们可以将这个程序放到后台去运行,不至于阻塞终端:

962d543bd453339cdaf75f29e444e566.png

b63f6f5a4920527ac1c0b6c1777d5343.png

然后此时的运行结果就都输出到了"nohup.out"这个日志文件了,可以通过如下命令去查看:

93217aade4aebeeb911faa28c5dcc2d9.png

dd3aea3d77c0d1251a51ce8d2dd2577d.png

那如果此时用kill命令将咱们这个程序给杀掉,杀掉之后咱们目前程序是没有任何处理的,如下:

925f0b219716d2d7d3800503bd6ab8f4.png

而如果是程序出现了异常那咱们的程序也就直接挂掉了,咱们来改一下程序:

2a18318a206ba15571505149c06502db.png

编译运行:

a51e34eb15f71b59cc50b1843ce65987.png

接下来给程序加入一个钩子,当进程死掉之后可以执行咱们的一段逻辑,具体做法如下:

f752d1b20d668d3f1c5f6b55f9d2395b.png

编译运行:

52cffd7417d62fb6b9217588ab6d1759.gif

很显然这次当程序抛异常导致程序挂掉之后就正常执行了咱们预期的程序,这也就是钩子程序的作用,那下面再来试验一下如果用kill命令手动去杀那依然可以执行钩子程序么,先将异常给注释掉:

fd63be418d6dd65e0ea451c9a8c73cfe.png

再来编译运行:

d8aceea622b388b07f49faa56138f6e3.gif

嗯~~正常被执行了,但是kill -9就不一样了,下面演示一下:

3cc14cf5e2b8f57d8cd65faee095fe15.gif

很显然这次程序就直接挂掉了,因为kill -9属于强杀,对于这种情况咱们的钩子程序是不管用的,所以对于服务器的管理人员杀掉程序时一般是非常忌讳用kill -9的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值