[進程]kill 9和15,以及pkill, killall


轉自:https://www.cnblogs.com/liuhouhou/p/5400540.html

大家對kill -9 肯定非常熟悉,在工作中也經常用到。特別是你去重啟tomcat時。可是多半看來,我們對-9的理解只是表面而已。

很少有人(包括我)認真的去了解一下 kill -n 這個n到底是什么東東。自我批評一下。

好吧。我們來好好的認識一下這個熟悉的陌生人。

1. kill

1)kill

從help中可以清晰的看到 -n 指的是 信號編號,那問題來了,“信號編號”是哪位大神???

2)kill -l(查看Linux/Unix的信號變量)

這么多呀!! 今天就單獨說一下SIGKILLSIGTERM

3)(kill pid) 、( kill -15 pid)

系統會發送一個SIGTERM的信號給對應的程序。當程序接收到該signal后,將會發生以下的事情

  1. 程序立刻停止
  2. 當程序釋放相應資源后再停止
  3. 程序可能仍然繼續運行

      大部分程序接收到SIGTERM信號后,會先釋放自己的資源,然后在停止。但是也有程序可以在接受到信號量后,做一些其他的事情,並且這些事情是可以

      配置的。如果程序正在等待IO,可能就不會立馬做出相應。

  也就是說,SIGTERM多半是會被阻塞的、忽略。

4)kill  -9 pid

你不是可以不響應 SIGTERM嗎??那好,我給你下一道必殺令,我看你還不乖乖的。多半admin會用這個命令

不過,也不是所有的程序都會乖乖聽話,總有那些狀態下的程序無法立刻相應。

 2.pkill

pkill和kill也有同樣的格式, 只不過指定的是進程名,pkill -signal process_name, signal的值和kill -l顯示的相同,默認15,強制的話可以指定9

如下可以等同, kill -9 `pidof process_name`和pkill -9 process_name

 3.killall

當ps -e里面存在多個相同的進程名而對應擁有着不同的進程號,kill則只能殺死1個進程,其他相同名稱的進程仍然存在,而pkill和killall,則可以一次殺死所有擁有相同名稱的進程. killall和kill, pkill一樣可以使用-signal, 也就是-9, -15. 他和pkill的用法幾乎相同,當然pkill可以指定非完整名稱,而killall則必須指定完整進程名稱。

 

Attention: 不管是kill還是pkill, 在執行kill -9之前,最好執行kill -15給進程一次自己殺死自己的機會,這樣可以清楚一些文件或者恢復一些狀態,否則可能會留一些corrupt文件,從而影響進程的再次啟動。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM