研究kill 和 kill -9 的区别

研究kill 和 kill -9 的区别

本项目有个接口/test,请求后该接口需要处理很久。在接口还未返回结果的时候,使用killkill -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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章