在 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

相關內容