研究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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章