积累如何优雅关闭SpringBoot Web服务进程

Posted GrapefruitTea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了积累如何优雅关闭SpringBoot Web服务进程相关的知识,希望对你有一定的参考价值。

1.使用ps ef查出进程对应的pid。

2.使用kill -15 pid结束进程。

为什么不使用kill -9 pid,个人理解kill -15 pid更优雅,能在结束进程前执行spring容器清理工作。

二者区别如下:

SIGNKILL(9) 是立即杀死进程. 该信号不能被阻塞, 处理和忽略。
SIGNTERM(15) 是正常退出进程,退出前可以被阻塞或回调处理。并且它是Linux缺省的程序中断信号。

附一个shell,shell目的:查询进程名包含demo-0.0.1的进程id,查到后kill -15 pid结束进程。(更完善的做法,在kill -15 pid后sleep一段时间,再去查询,如果还能查到,再使用kill -9 强制杀掉进程)

#! /bin/bash
processName = `demo-0.0.1`
echo $processName
pid=$(ps -ef | grep $processName | grep -v grep | awk \'{print $2}\')
if [ -n "$pid" ]
then   
    kill -15 $pid
fi

  

测试如下:

1.运行一个spingboot的demo项目。并使用@PreDestroy注解测试关闭spring容器后释放的一些逻辑。

 

 

2.使用kill -15 pid 结束进程时,会执行destroy方法的逻辑。

 

 3.使用kill -9 pid 结束进程时,不会执行destroy方法的逻辑。

 

 

以上是关于积累如何优雅关闭SpringBoot Web服务进程的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 Spring Boot 守护程序/服务器应用程序立即关闭/关闭?

如何防止 Spring Boot 守护程序/服务器应用程序立即关闭/关闭?

Spring Boot 优雅关闭

Java 问题记录

优雅关闭web服务的方式

SpringBoot 优雅停机