Linux

通過刪除 proc/ 來終止 tcp 埠綁定0−90−90-9/net/… 在 Linux 中

  • January 9, 2016

我有一個腳本來呼叫 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這會在幾秒鐘後在被終止的應用程序中清除。最好的辦法是修復你的呼叫程序以做正確的事情。

引用自:https://serverfault.com/questions/747930