Unix

lsof 未顯示 proc 正在偵聽的埠

  • March 18, 2010

我在一個盒子上有很多程序在監聽多個埠。

我正在嘗試將埠映射到 pid。

問題是 lsof 沒有告訴我哪些埠屬於哪個程序。

給定一個監聽埠 80 的 apache,我可以看到它通過 netstat 監聽:

user@host% netstat -an|grep LISTEN|grep 80

*.80 *.* 0 0 49152 0 LISTEN

但是當我嘗試將埠 80 映射到 pid 時,我什麼也得不到:

user@host% lsof -iTCP:80 -t

當我嘗試查看特定 pid 正在使用的套接字時,我得到:

user@host% lsof -lnP -p31 -a -i

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

libhttpd. 31 0 15u IPv4 0x6002d970b80 0t0 TCP *:65535 (LISTEN)

請注意 NAME 列中的 *:65535。

有誰知道為什麼 lsof 沒有報告正在使用的埠?

我以root身份執行。我正在使用 lsof 和 os 版本的混合:

Solaris10 上的 lsof v4.77 sparc

lsof v4.72 上 Redhat4.2

我知道 linux 解決方案可以使用“netstat -p”,

所以我想我只是在尋找 solaris 不工作的原因,但我發現 lsof 經常保持沉默並且沒有向我顯示預期的數據。

與 lsof 不同,您寧願使用作為 Solaris 一部分並受 Sun 支持的 pfiles。

它的用法略有不同,因為它需要一個 pid 作為參數,但您可以通過以下方式實現您想要的:

pfiles $(pgrep libhttpd)

甚至,如果您不知道程序名稱:

pfiles /proc/*  

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