Lsof

在 lsof 輸出中,那些“襪子”線是什麼?

  • January 25, 2020

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

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

這些線是什麼?

它們可能是 TCP 連接嘗試失敗的結果嗎?

lsof當無法找到有關 TCP 套接字的其他資訊時顯示此行:它知道這是一個 TCP 套接字,但不知道更多。

我能想到的原因有兩個:

  • 不太可能:套接字仍然沒有偵聽或連接:例如,伺服器或客戶端用於socket(AF_INET, SOCK_STREAM, 0)創建 TCP 套接字但尚未呼叫listen(2)connect(2)。這可能是由於缺乏資源或軟體錯誤造成的。
  • 今天最有可能:被看到的程序lsof在其他網路命名空間中執行,通常在容器(Docker、LXC、LXD …)中,因此lsof無法訪問相關資訊並且不會顯示它。

然後,您應該lsof從與程序相同的網路命名空間執行。lsnsand命令對此nsenter有很大幫助。對於您的情況,這可能會起作用:

 nsenter -t 829 --net lsof -n -p 829

在正常情況下lsof會顯示IPv4IPv6代替sock並且會有額外的資訊,比如監聽埠或涉及的地址。即使連接仍在進行中,也會顯示所涉及的地址,例如SYN_SENT

引用自:https://serverfault.com/questions/1000338