在 Ubuntu/Debian 下的 lsof 命令中,我看到很多如下所示的行:
PROGRAM 829 root 140u sock 0,8 0t0 244182 protocol: TCP
Run Code Online (Sandbox Code Playgroud)
这些线是什么?
它们可能是 TCP 连接尝试失败的结果吗?
当lsof
在 TCP 套接字上找不到附加信息时会显示这一行:它知道它是一个 TCP 套接字但仅此而已。
我能想到的原因有两个:
不太可能:套接字仍未侦听或连接:即用于socket(AF_INET, SOCK_STREAM, 0)
创建 TCP 套接字但尚未调用的服务器或客户端listen(2)
或connect(2)
. 这可能是由于缺乏资源或有缺陷的软件造成的。
今天最有可能的是: 看到的进程lsof
在其他网络命名空间中运行,通常在容器(Docker、LXC、LXD ...)中,因此lsof
无法访问相关信息,也不会显示它。
然后,您应该lsof
从与进程相同的网络命名空间运行。该lsns
和nsenter
命令可以极大地帮助了这一点。对于您的情况,这可能会起作用:
nsenter -t 829 --net lsof -n -p 829
Run Code Online (Sandbox Code Playgroud)
在正常情况下,lsof
会显示IPv4
或IPv6
代替sock
并且会有附加信息,例如所涉及的侦听端口或地址。即使连接仍在进行中,也会显示所涉及的地址,例如SYN_SENT
。
归档时间: |
|
查看次数: |
1459 次 |
最近记录: |