在 lsof 输出中那些“sock”行是什么?

在 lsof 输出中那些“sock”行是什么?

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

PROGRAM 829 root  140u     sock        0,8       0t0 244182 protocol: TCP

这些线是什么?

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

答案1

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
    

在正常情况下lsof,会显示IPv4IPv6而不是sock,并会显示附加信息,如监听端口或相关地址。即使连接仍在进行中,也会显示相关地址,例如SYN_SENT

相关内容