2013-02-11 56 views
0

我有啓動後綁定到地址和端口的進程。這些進程在屏幕上使用exec運行,以便在子進程關閉時屏幕關閉。Bash:故障安全殺死綁定到IP地址的進程

當查殺進程時,我使用kill -9 PID,但有時候屏幕會結束,但是當我重新啓動進程時,舊進程仍在使用該端口,我必須再次終止進程。

我也讀過SIGKILL葉插座打開,陳舊的內存,使用中的隨機資源,所以我轉向只是普通的kill PID,這是一個SIGTERM

SIGTERM是否保證允許進程從地址和端口中解除綁定,還是有更好的選擇嗎?

回答

1

如果您SIGKILL保持打開一個偵聽端口的所有進程,它將保證關閉。

然而,根據TCP規範的要求(讓偵聽客戶端知道端口已關閉,以防他們錯過原始關閉數據包時),它可能在幾分鐘內關閉,而它處於TIME_WAIT狀態。

表現良好的服務器將使用選項SO_REUSEADDR打開套接字,允許它在立即重新啓動時回收相同的端口,但這是特定於應用程序的。如果沒有它,該端口似乎將被使用幾分鐘。