在 lsof 输出中,那些“袜子”线是什么?

Dan*_*iel 3 lsof

在 Ubuntu/Debian 下的 lsof 命令中,我看到很多如下所示的行:

PROGRAM 829 root  140u     sock        0,8       0t0 244182 protocol: TCP
Run Code Online (Sandbox Code Playgroud)

这些线是什么?

它们可能是 TCP 连接尝试失败的结果吗?

A.B*_*A.B 5

lsof在 TCP 套接字上找不到附加信息时会显示这一行:它知道它是一个 TCP 套接字但仅此而已。

我能想到的原因有两个:

  • 不太可能:套接字仍未侦听或连接:即用于socket(AF_INET, SOCK_STREAM, 0)创建 TCP 套接字但尚未调用的服务器或客户端listen(2)connect(2). 这可能是由于缺乏资源或有缺陷的软件造成的。

  • 今天最有可能的是: 看到的进程lsof在其他网络命名空间中运行,通常在容器(Docker、LXC、LXD ...)中,因此lsof无法访问相关信息,也不会显示它。

    然后,您应该lsof从与进程相同的网络命名空间运行。该lsnsnsenter命令可以极大地帮助了这一点。对于您的情况,这可能会起作用:

      nsenter -t 829 --net lsof -n -p 829
    
    Run Code Online (Sandbox Code Playgroud)

在正常情况下,lsof会显示IPv4IPv6代替sock并且会有附加信息,例如所涉及的侦听端口或地址。即使连接仍在进行中,也会显示所涉及的地址,例如SYN_SENT