2010-06-05 58 views
6

哪個問題會導致生產應用程序中的kill -9(在Linux中是準確的)?kill -9和生產應用程序

我有應用程序,做了一些期刊工作,停止這些需要很長一段時間,我不關心,如果有些工作將被中止 - 工作可以通過新的流程完成。那麼我可以使用kill -9來立即停止它,否則這會導致嚴重的操作系統問題?

例如,Unicorn,使用它作爲正常工作程序:

當你的應用程序就會出差錯,一個BOFH可以只是「殺-9」失控的工作進程,而無需擔心拆除所有客戶端了下來,正好一。

但這article聲稱:

-9(或殺死的)參數殺(1)不應該在UNIX系統上使用

PS:據我所知,kill -9不能由應用程序處理,但我知道,對於可能的應用程序它不會導致任何問題,我只是intrested它可以導致操作系統級別的一些問題? shared memory segments active, lingering sockets聽起來對我很危險。

+1

一般來說,從不使用'kill -9'的建議是很好的 - 當你足夠了解你的軟件知道什麼時候忽略這個建議,你就可以停止擔心並且不惜任何你想要的殺死任何東西。 – 2010-06-05 11:47:39

回答

1

這取決於它是什麼樣的應用程序。

像一個數據庫既可以丟失數據(如果它不其所有數據寫入持久事務日誌一次),或需要更長的時間來下一次,或兩者啓動。

雖然Crash-only是一個很好的原則,很少應用目前遵循它。

例如,mysql數據庫不是「僅崩潰」並使用kill -9將其kill掉,將導致啓動時間(比干淨關閉)顯着更長,數據丟失或兩者都有,具體取決於設置並在一定程度上運氣)。

另一方面,Cassandra實際上鼓勵使用kill -9作爲關閉機制;它不支持別的。

4

kill -9不給應用程序一個機會,徹底關閉。

正常情況下,應用程序可以捕獲一個SIGINT/SIGTERM並完全關閉(關閉文件,保存數據等)。應用程序無法捕獲SIGKILL(發生在kill -9),因此它無法執行任何此(可選)清理。

更好的方法是使用標準kill,如果應用程序仍然沒有響應,則使用kill -9

0

應用程序無法捕獲KILL信號。如果應用程序正在將一些複雜的數據結構寫入磁盤中,那麼該結構可能只是一半寫入,導致數據文件損壞。通常最好將一些其他信號(如USER1)用作「停止」信號,因爲這可能會被捕獲並允許應用程序以受控方式關閉。

2

kill -9不會造成任何 「嚴重OS問題」。但是這個過程會立即停止,這意味着它可能會使數據處於奇怪的狀態。