我在一个盒子上有很多进程在监听多个端口。
我正在尝试将端口映射到 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 作为参数,但您可以通过以下方式实现您想要的:
甚至,如果您不知道进程名称: