通过在linux中删除proc / / net / …来终止tcp端口绑定

我有一个脚本来调用系统调用杀死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秒后在杀死的应用程序中自行清除。 最好的办法是修复你的调用程序做正确的事情。