<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          “kill -9”一時爽,秋后算賬淚兩行

          共 2694字,需瀏覽 6分鐘

           ·

          2020-07-31 16:12


          點擊「閱讀原文」查看良許原創(chuàng)精品視頻。


          kill是殺死的意思,帶有主動的意味。鑒于master、slave這樣的名詞,需要在計算機軟件中進行整改,kill這樣明顯帶有負面信息的單詞,按理說也需要被干掉。

          不過,如果把命令名字改了,效果也許會更好。因為在Linux上,kill根本就不是殺死的意思。

          它只是想要給進程發(fā)送一個信號而已。使用kill -l可以看到長長的信號列表。

          對Java程序員來說,用的最多的就是kill -9,我也不知道從哪里來的傳承,碼農們都喜歡這種暴力性的命令--喜歡用鋒利的匕首一擊致命。

          但是這種玩法又危險的多,不給進程說話的機會。

          大家都知道電視劇里,重要人物臨死的時候,會啰啰嗦嗦說很多話,話說不完是不會死的。無論是武林高手,還是達官貴人,都得交代一些能讓故事情節(jié)繼續(xù)發(fā)展下去的廢話。

          《水滸傳》里的“英雄們”,來的就相對直接一些??吹牟凰苯訂蔚吨比肭兄幸?,不允許他人有一丁點的廢話,通常情況下直接嗝屁。

          各位使用kill -9的兄弟們,個個都像黑黑的李逵,單純、暴力、不講人情。

          SIGKILL
          9
          Kill signal
          結束信號

          中國的中庸太極之道,在此蕩然無存。kill -9直接使得優(yōu)雅關閉這個名詞成了廢物。

          何為優(yōu)雅關閉?其實就像是人的“遺言”,要在死之前,交代一些身后事。

          我就常常在想,在我死之前,要把所有的錢花的一分不剩。既不留給后代,也不讓它爛在銀行里。這就需要做很多事。

          計算機軟件中,在死之前,要處理的事情也還不少。比如,需要把緩沖區(qū)的內容處理完畢,發(fā)送出去;微服務節(jié)點需要先把自己從注冊中心摘除,才能放心的go die。

          大體來說,有下面幾個影響:

          • 請求丟失:內存隊列中等待執(zhí)行請求丟失
          • 數據丟失:處于內存緩存中數據未持久化到磁盤
          • 文件損壞:正在寫的文件沒有沒有更新完成,導致文件損壞
          • 業(yè)務中斷:處理一半的業(yè)務被強行中斷,如支付成功了,卻沒有更新到數據庫中
          • 服務未下線:上游服務依然往停止節(jié)點發(fā)送請求

          這些情況下,如果把服務玩壞了,正好被領導撞上,被開是分分鐘的事。

          Java應用中處處充斥著這種優(yōu)雅,靠的是shutdownhook鉤子。就是下面這行代碼:

              Runtime
          .getRuntime()
          .addShutdownHook(
          new Thread(() -> System.out.println("Do something in Shutdown Hook")));

          有沒有好的辦法?有,用kill -15發(fā)送SIGTERM信號即可。

          但有時候kill -15并不能殺死進程,這個時候,才是kill -9需要出場的時候。

          聽夠了15臨死前說的一些廢話,使用9要它的命。

          一般的,需要使用kill -15去嘗試殺死進程。如果過一段時間(比如10秒),進程還沒有停止,kill -9才會出場。

          kill的默認信號值,就是15,可以說是很貼心了。但還是有很多人使用9。

          我想了半天原因,就是一個字:。

          kill -15需要多次確認,而kill -9一次完事,多數情況下不會出事。有這提高工作效率的事,何樂而不為呢?


          常用的信號,還有SIGQUIT,也就是kill -3

          在Java程序下,kill -3的輸出特別有意思,它直接在stdout上輸出了jstack命令所產生的內容。如果是tomcat,那么輸出就在canalina.out文件里。

          如果jstack對你的應用不好使了,或者應用幾乎沒有響應了。使用kill -3是一種曲線救國的方式。

          其實是JDK屏蔽了這個信號,對Java來說是一個福利。我們在JDK的文檔中找到相關介紹。

          Sun’s JVM catches signals to implement shutdown hooks for abnormal JVM termination. The JVM uses SIGHUP, SIGINT, and SIGTERM to initiate the running of shutdown hooks.

          The JVM uses a similar mechanism to implement the pre-1.2 feature of dumping thread stacks for debugging purposes. Sun’s JVM uses SIGQUIT to perform thread dumps.


          我這里有一個腳本,能夠接受兩個參數。第一個參數是pid,第二個參數是等待的秒數。

          pid=$1
          count=$2
          n=0
          if [ ! -n $count ];then
          count=10
          fi

          while [[ $n -lt $count ]]
          do
          let "n++"
          kill -0 $pid
          if [ $? -ne 0 ]
          then
          echo "program not exist"
          break
          else
          echo "send kill -15 to $pid"
          kill -15 $pid
          sleep 1
          fi
          if [[ $n -eq $count ]]
          then
          echo "kill -9 $pid"
          # after 10s , try to send kill -9
          kill -9 $pid
          fi
          done

          腳本將持續(xù)使用kill -0判斷進程是否存在,然后持續(xù)發(fā)送kill -15指令。等超過指定的秒數,進程依然存在,則最終發(fā)送kill -9命令。

          問題是,通常情況下,你還是需要等待上幾秒。自動化機器人不會覺得煩,你會。

          所以你還是用kill -9。




          良許個人微信


          添加良許個人微信即送3套程序員必讀資料


          → 精選技術資料共享

          → 高手如云交流社群





          本公眾號全部博文已整理成一個目錄,請在公眾號里回復「m」獲??!

          推薦閱讀:

          這個只有1.5M的軟件,能讓你的網速快3倍

          在Linux系統(tǒng)中使用Vim讀寫遠程文件

          漫畫:什么是 “設計模式” ?


          5T技術資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機,樹莓派,等等。在公眾號內回復「1024」,即可免費獲?。。?/span>


          瀏覽 23
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产三级视频在线 | 婷婷五月欧美乱伦 | 久操AV中文字幕 | 一级片黄色免费 | 污污污在线观看网站一区二区 |