在 Linux 中通过删除 proc/[0-9]/net/… 来终止 tcp 端口绑定

在 Linux 中通过删除 proc/[0-9]/net/… 来终止 tcp 端口绑定

我有一个脚本,用于调用 syscall Kill Linux(ubuntu)中占用某个 TCP 端口的进程。但即使我这样做,有时端口仍会保留在/proc/[0-9]/net绑定端口的目录中。

有没有简单的方法可以强制释放 tcp 端口?我知道哪个proc/X目录包含我想要终止的端口。我是否可以只删除该/proc/XXX/目录,并在删除后认为该端口可以自由使用?

有些帖子说我可以使用fuser,但我想知道操作系统级别发生了什么。

谢谢!

答案1

端口保持绑定,因为绑定到端口的调用应用程序不使用套接字选项SO_REUSEADDR。您应该修复调用应用程序以执行此操作。在 C 中:

int yes = 1;
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *)&yes, sizeof(yes));

几秒钟后,这个问题会在被终止的应用程序中自行解决net.ipv4.tcp_fin_timeout。不过,最好的办法是修复调用程序,让它做正确的事情。

相关内容