Linux
通過刪除 proc/ 來終止 tcp 埠綁定0−90−90-9/net/… 在 Linux 中
我有一個腳本來呼叫 syscall 殺死在 Linux (ubuntu) 中持有某個 TCP 埠的程序。但即使我這樣做,有時埠仍保留在
/proc/[0-9]/net
綁定埠的目錄中。有什麼簡單的方法可以強制釋放 tcp 埠?我知道哪個
proc/X
目錄包含我想要殺死的埠。我可以只刪除/proc/XXX/
目錄並認為刪除後埠可以免費使用嗎?有些文章說我可以使用
fuser
,但我想知道作業系統級別發生了什麼。謝謝!
埠保持綁定,因為綁定到埠的呼叫應用程序不使用套接字選項
SO_REUSEADDR
。您應該修復呼叫應用程序來執行此操作。在 C 中:int yes = 1; setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *)&yes, sizeof(yes));
net.ipv4.tcp_fin_timeout
這會在幾秒鐘後在被終止的應用程序中清除。最好的辦法是修復你的呼叫程序以做正確的事情。