我在一个盒子上有许多进程在监听多个端口。
我试图将端口映射到 pid。
问题是 lsof 没有告诉我哪些端口属于哪个进程。
假设 apache 正在监听端口 80,我可以通过 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 sparc 上的 lsof v4.77
Redhat4.2 上的 lsof v4.72
等
我知道 linux 解决方案可以使用“netstat -p”,
所以我想我只是在寻找为什么 solaris 不工作,但我发现 lsof 经常保持沉默并且不显示预期的数据。
答案1
您宁愿使用属于 Solaris 一部分并受 Sun 支持的 pfiles,与 lsof 不同。
它的用法略有不同,因为它需要一个 pid 作为参数,但你可以用类似如下的方法实现你想要的:
pfiles $(pgrep libhttpd)
或者,如果您不知道进程名称:
pfiles /proc/*