研究kill 和 kill -9 的区别
本项目有个接口/test
,请求后该接口需要处理很久。在接口还未返回结果的时候,使用kill
和kill -9
杀掉进程会怎么样?
- 用chrome请求
/test
,看到转圈,执行kill -9 进程ID
,可以看到转圈立即停止。可以想象到kill -9
是立即杀死进程,不会等待善后。 - 用chrome请求
/test
,看到转圈,执行kill 进程ID
,可以看到继续转圈,但是过了一阵子界面就不转圈停止了。可以想象到,还是会等待善后的,即会
等待还没运行完的线程,但是因为线程实在处理太久了,kill
是有最大等待时间的,过了这个时间还不处理完毕,就直接关闭了
上述只是看表象,我们写了一个 TestAnnotationPreDestroy
类监听当springboot程序被关闭时打印一条语句,可以看到kill -9
时不打印,而kill
时会打印,这是更加客观的证据。
kill 究竟会等待多长时间?
这个应该是操作系统会留多少时间给进程善后,具体多少,我暂时未知
actuator 的 /actuator/shutdown优雅关机,属于哪种类型
从观察的结果来看 /actuator/shutdown
不是 kill -9
,应该是使用 kill
来实现的,它跟 kill
是一样的,都会等待一段时间,这短时间还执行不完就强关
kill 和 kill -9 以及 /actuator/shutdown 是不是执行后程序就不再接收新的请求?
请求/test
接口,执行以下命令,再迅速得在/test
还在转圈的时候访问/
接口,是不是程序就不再接收新的请求?(即/
没响应)
- kill -9:是直接杀死,无所谓的是否还接收新请求,
/
无响应 - kill:
/
无响应,说明/test
是已有正在处理的需求,那继续处理,但是对于/
是新请求的,就不再接收这个请求,chrome页面直接就返回 “无法访问此网站”(跟程序没启动时访问得到的结果同) /actuator/shutdown
:同kill
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135268.html