在实际应用中是如何停止一个 进程呢?
通过该命令发送一个关闭信号给到jvm, 然后就开始执行 Shutdown Hook 了,你可以做很多:
1、 关闭 socket 链接
2、 清理临时文件
3、 发送消息通知给订阅方,告知自己下线
4、 将自己将要被销毁的消息通知给子进程
5、 各种资源的释放
…
所谓 优雅停机,就是在要关闭服务之前,不是立马全部关停,而是做好一些善后操作,比如:关闭线程、释放连接资源等。
再比如,就是不会让调用方的请求处理了一增,一下就中断了。而处理完本次后,再停止服务。
Java语言中,我们可以通过:
方法来注册钩子,以保证程序平滑退出。
现在我们都是使用 Springoot 进行开发了,其实 SpringBoot 也提供了容器销毁的一个回调, ApplicationContextClosedEvent .除此之外, 还可以监听内嵌 Tomcat 的关闭事件.
需要注意的是,上述的关闭钩子,并不能响应 下面个kill 命令
kill -9 相当于一次系统宕机,系统断电。这会给应用杀了个措手不及,没有留给应用任何反应的机会。
所以,无论如何是优雅不起来了。
















