目录
前言
上篇文章 为什么不建议使用kill -9 关闭程序? 我们讲解了不建议使用kill -9 pid的方式解决掉程序!
那么我们如何优雅的结束进程呢?
在java中他给我们提供了结束项目的能力,如:tomcat中,我们使用shutdown.sh或者shutdown.bat。
什么是优雅的结束
- 停止内部线程和接收请求
- 判断当前是否有线程正在运行
- 确保等待正在执行的线程执行完毕
- 停止我们的运行容器
这样,我们可以看到一个正常的流程结束的过程,如果换成我们常用的springboot项目,怎么去结束呢?
解决方案
接下来,我们看一下具体方案:
kill -15 pid
这种方式他其实会相对比较优雅的结束项目(进程)。不过,不是百分百的优雅
首先我们自己假设有个main方法,我首先打印一个开始标记falg,然后让线程睡眠1000s,然后在打印结束标记flag,我们在打印完开始后,在进入sleep的时候,使用kill -15 pid结束掉进程,大家认为会出现什么结果呢?
其实,可以猜测到他会报错,但是标记结束的falg依然会打印出来。
这个其实和sleep方法又息息相关了,在线程进入休眠期的时候,抵用线程interrupt方法会导致sleep抛出异常信息,在调用kill -15 pid的时候,命令会马上调用线程的interrupt方法,其目的就是为了让线程停止,即使线程停止的命令调用了,线程什么时候去停止运行,还是线程自己控制的,这就是我们能够看到打印了结束标记falg的原因了。
这个只是其中之一的方法,今天关于linux中如何优雅的结束掉进程就讲解到这,后续会更新其他优雅结束进程的方法,欢迎大家留言交流。
也欢迎大家点击下方卡片,关注《coder练习生》