Unix
lsof 未顯示 proc 正在偵聽的埠
我在一個盒子上有很多程序在監聽多個埠。
我正在嘗試將埠映射到 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/*