1. 程式人生 > >不要使用kill -9 殺死程序,可以先使用kill -15

不要使用kill -9 殺死程序,可以先使用kill -15

Perl語言專家Randal Schwartz在一篇短文裡這樣寫:

no no no.不要使用kill -9.

它沒有給程序留下善後的機會:

1) 關閉socket連結

2) 清理臨時檔案

3) 將自己將要被銷燬的訊息通知給子程序

4) 重置自己的終止狀態

等等。

通常,應該傳送15,等一兩秒鐘,如果沒效果,傳送2,如果還不行,傳送1。如果還不行,那你應該把那個程式刪掉,因為那個程式寫的太爛了!

不要使用kill -9。不要用收割機來修剪花盆裡的花。

總之,在使用kill -9前,你應該先使用kill -15,給目標程序一個清理善後工作的機會。(程序也許無法捕捉或直接忽略SIGKILL

訊號,但它們可以,通常也是能夠捕捉SIGTERM訊號的。)如果你不留機會讓程序完成清理工作,它們會留下一些不完整的檔案或狀態,當系統重啟時,程式將無法理解這些狀態。

strace/trussltracegdb都是檢視一個卡住的程序因何卡住的好工具。(Solaris裡的truss -u非常好用;)Solaris裡還有一些非常有用的/proc相關的工具,有一些已經被移植到了Linux上。