为什么在 TCP 连接关闭后文件描述符仍然存在?

Why does file descriptor remain after TCP connection is CLOSED?

当我 运行 lsof 时,我看到许多带有 TCP <HOST>:<PORT> -> <IP>:https (CLOSED) 的条目。

这是表明描述符曾经存在还是打开的文件仍然存在的标记?

假设它不是标记,为什么文件描述符仍然存在?

等待几分钟后,CLOSED 条目仍显示在输出中。我只看到它们在进程退出时消失。

lsof的(CLOSED)说明告诉你TCP连接处于关闭状态(已关闭),可能是由于远程端关闭了连接。 lsof 列出文件描述符的事实意味着文件描述符仍处于打开状态,指的是已关闭的 TCP 连接。没有涉及的文件仍然存在,只有套接字的本地端。

文件描述符将持续存在,直到进程将其关闭,关闭系统调用可能会发生这种情况,或者在进程退出时会自动发生。

关闭文件描述符和关闭连接只是切线相关的。当您关闭文件描述符时,如果它是对连接一端的最后引用,则连接将被关闭(如果它尚未关闭 - 通过另一端关闭,或者通过显式关闭关闭系统调用)