当我运行 lsof
我看到很多条目带有 TCP <HOST>:<PORT> -> <IP>:https (CLOSED)
.
这是表明描述符曾经存在还是打开的文件仍然存在的标记?
假设它不是标记,为什么文件描述符仍然存在?
等待几分钟后,CLOSED
条目仍显示在输出中。我只看到它们在进程退出时消失。
最佳答案
来自 lsof 的 (CLOSED)
注释告诉您 TCP 连接处于关闭状态(已关闭),可能是由于远程端关闭了连接。 lsof 列出文件描述符的事实意味着文件描述符仍处于打开状态,指的是已关闭的 TCP 连接。没有涉及的文件仍然存在,只有套接字的本地端。
文件描述符将持续存在,直到进程关闭它,这可以通过关闭系统调用发生,或者在进程退出时自动发生。
关闭文件描述符和关闭连接只是切线相关的。当您关闭文件描述符时,如果它是对连接一端的最后引用,则连接将被关闭(如果它尚未关闭 - 通过另一端关闭,或者通过显式关闭关闭系统调用)
关于unix - 为什么在 TCP 连接关闭后文件描述符仍然存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49640842/