在我的公司,我看到使用killall -9
來殺死守護進程,然後再次啓動它們。 (其實應該是killall -SIGKILL
)使用`killall -9服務器; ./server&`重新啓動unix服務 - 持久的問題?
我想向同事解釋,這不應該是我們重新啓動守護進程的方式。也許使用SIGINT
符號,以便進程可以正確關閉或使用init.d
腳本正確地重新啓動服務。
我們在C
中編程,因此有什麼可能會發生的對系統不利的SIGKILL
?顯然這個信號不能被這個進程捕獲,所以沒有內部信號處理程序可以做任何好的關閉處理,但是
- 文件讀/寫緩衝區是否被正確刷新?
- 動態內存是否會被正確回收?
- 還有其他的例子嗎?
我能在這些問題的答案猜測,但沒有人知道的答案?任何人都可以展示他們的Unix知識來幫助我嗎?用具體的知識武裝我可以提出更好的論點!
當一個應用程序被殺時,無論如何,它被分配的任何內存都會被釋放。這並不是說應用程序不能在當時使用的某個OTHER服務/進程中觸發內存泄漏,但是通過malloc()等獲得的進程本身將被釋放並可重用。 – 2012-02-22 15:45:20
@MarcB - 「這並不是說應用程序無法在當時使用的某些其他服務/進程中觸發內存泄漏」 - 相關。例如流程A'與流程B'初始化對話。流程B爲此對話分配內存,並且只有當流程A「終止」對話時纔會釋放內存。不幸的是,A得到了'kill -9'ed,B永遠不會解除分配。在課程結束前,B結束。 – ArjunShankar 2012-02-22 16:13:21
謝謝Arjun和Marc B – 2012-02-23 10:30:25