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

來自公眾號:小姐姐味道
作者:小姐姐養(yǎng)的狗

作者簡介:一個不允許程序員走彎路的公眾號勤庐。聚焦基礎架構和Linux。十年架構好港,日百億流量愉镰,與你探討高并發(fā)世界,給你不一樣的味道钧汹。

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

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

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

image

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

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

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

《水滸傳》里的“英雄們”姓蜂,來的就相對直接一些按厘。看的不爽钱慢,直接單刀直入切中要害逮京,不允許他人有一丁點的廢話,通常情況下直接嗝屁滩字。

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

SIGKILL
9
Kill signal
結束信號

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

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

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

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

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

  • 請求丟失:內(nèi)存隊列中等待執(zhí)行請求丟失
  • 數(shù)據(jù)丟失:處于內(nèi)存緩存中數(shù)據(jù)未持久化到磁盤
  • 文件損壞:正在寫的文件沒有沒有更新完成呕童,導致文件損壞
  • 業(yè)務中斷:處理一半的業(yè)務被強行中斷漆际,如支付成功了,卻沒有更新到數(shù)據(jù)庫中
  • 服務未下線:上游服務依然往停止節(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一次完事,多數(shù)情況下不會出事棘伴。有這提高工作效率的事寞埠,何樂而不為呢?


常用的信號焊夸,還有SIGQUIT仁连,也就是kill -3

在Java程序下阱穗,kill -3的輸出特別有意思饭冬,它直接在stdout上輸出了jstack命令所產(chǎn)生的內(nèi)容。如果是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.


我這里有一個腳本,能夠接受兩個參數(shù)拓挥。第一個參數(shù)是pid唠梨,第二個參數(shù)是等待的秒數(shù)。

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指令当叭。等超過指定的秒數(shù),進程依然存在盖灸,則最終發(fā)送kill -9命令蚁鳖。

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

所以你還是用kill -9琅攘。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市松邪,隨后出現(xiàn)的幾起案子坞琴,更是在濱河造成了極大的恐慌,老刑警劉巖逗抑,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剧辐,死亡現(xiàn)場離奇詭異寒亥,居然都是意外死亡,警方通過查閱死者的電腦和手機荧关,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門溉奕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忍啤,你說我怎么就攤上這事加勤。” “怎么了同波?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵鳄梅,是天一觀的道長。 經(jīng)常有香客問我未檩,道長戴尸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任冤狡,我火速辦了婚禮孙蒙,結果婚禮上,老公的妹妹穿的比我還像新娘悲雳。我一直安慰自己马篮,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布怜奖。 她就那樣靜靜地躺著,像睡著了一般翅阵。 火紅的嫁衣襯著肌膚如雪歪玲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天掷匠,我揣著相機與錄音滥崩,去河邊找鬼。 笑死讹语,一個胖子當著我的面吹牛钙皮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播顽决,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼短条,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了才菠?” 一聲冷哼從身側響起茸时,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赋访,沒想到半個月后可都,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缓待,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年渠牲,在試婚紗的時候發(fā)現(xiàn)自己被綠了旋炒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡签杈,死狀恐怖瘫镇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芹壕,我是刑警寧澤汇四,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站踢涌,受9級特大地震影響通孽,放射性物質發(fā)生泄漏。R本人自食惡果不足惜睁壁,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一背苦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潘明,春花似錦行剂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至遂填,卻和暖如春铲觉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吓坚。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工撵幽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人礁击。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓盐杂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親哆窿。 傳聞我的和親對象是個殘疾皇子链烈,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359