老胡的看法:
Linux下的kill命令,通常我們使用比較多的是kill -9和kill -15,kill -9的含義是立即終止程序,不做任何清理工作;而kill -15的含義是向被結束的程序傳送一個終止訊號,通常被結束程序會根據這個訊號來進行一些結束前的整理工作,比如將快取回寫、結束socket連線,關閉開啟的檔案等等。所以老胡認為如果被結束的程序涉及到這些整理工作的時候,就不適合使用kill -9來結束。實際上,除非你知道待結束的程序此時在做什麼,否則最好永遠不要使用kill -9。
資料庫程式為了能夠迅速檢索到它所儲存的資料,一般都會設計成將索引放在記憶體空間中,以達到高速的讀寫效能。假設資料庫的內容剛剛更新,新資料的索引放在記憶體空間中還沒有會寫到硬碟上,此時使用kill -9結束資料庫程序的時候,就會造成索引資料的丟失。
在C/S架構的軟體系統中,如果客戶端和服務端正在進行通訊,使用kill -9結束服務端的話,會造成客戶端失去連線。有些軟體系統中因為設計不到位沒有考慮到這種情況,客戶端就會一直處於等待狀態,無法確認服務端的異常情況;使用kill -9結束客戶端,也會造成服務端得不到客戶端的響應,難以對中斷的業務進行處理。
總結一下,kill -9的破壞性非常強,只有在確認待結束的程序資料完全安全之後,才能夠放心使用kill -9。老胡建議,不是特別極端的情況,多使用kill -15來結束程序,這樣程序能夠將資料回寫,並通知自己的子程序準備結束,可以最大程度上降低資料丟失的風險。
老胡的看法:
Linux下的kill命令,通常我們使用比較多的是kill -9和kill -15,kill -9的含義是立即終止程序,不做任何清理工作;而kill -15的含義是向被結束的程序傳送一個終止訊號,通常被結束程序會根據這個訊號來進行一些結束前的整理工作,比如將快取回寫、結束socket連線,關閉開啟的檔案等等。所以老胡認為如果被結束的程序涉及到這些整理工作的時候,就不適合使用kill -9來結束。實際上,除非你知道待結束的程序此時在做什麼,否則最好永遠不要使用kill -9。
不適合使用的例子之一:資料庫資料庫程式為了能夠迅速檢索到它所儲存的資料,一般都會設計成將索引放在記憶體空間中,以達到高速的讀寫效能。假設資料庫的內容剛剛更新,新資料的索引放在記憶體空間中還沒有會寫到硬碟上,此時使用kill -9結束資料庫程序的時候,就會造成索引資料的丟失。
不適合使用的例子之二:C/S架構的軟體系統在C/S架構的軟體系統中,如果客戶端和服務端正在進行通訊,使用kill -9結束服務端的話,會造成客戶端失去連線。有些軟體系統中因為設計不到位沒有考慮到這種情況,客戶端就會一直處於等待狀態,無法確認服務端的異常情況;使用kill -9結束客戶端,也會造成服務端得不到客戶端的響應,難以對中斷的業務進行處理。
總結一下,kill -9的破壞性非常強,只有在確認待結束的程序資料完全安全之後,才能夠放心使用kill -9。老胡建議,不是特別極端的情況,多使用kill -15來結束程序,這樣程序能夠將資料回寫,並通知自己的子程序準備結束,可以最大程度上降低資料丟失的風險。