我有一个在端口 4444 上运行的小型 Java ServerSocket 应用程序。我想在我的 OSX 终端中查看使用该端口的进程,我的第一个想法是执行以下操作:
netstat -a | grep 4444
然而,这并没有给我任何结果。
lsof -i :4444
我得到了以下(正确的)结果:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 66389 admin 18u IPv6 0x1ae123a422ebe931 0t0 TCP *:krb524 (LISTEN)
有人能告诉我为什么 netstat 不显示端口而 lsof 却显示吗?
答案1
Mac OSX 基于 BSD,因此netstat
在 Mac OSX 下无法显示 pid/进程名称。正如您已经发现的那样,lsof
这是正确的选择。
答案2
编辑:Mac OSX 附带的 Netstat 版本不会-p
像其他发行版那样解释该标志(协议而不是程序),因此虽然 Netstat 可能由于下面概述的原因而无法工作,但它lsof
仍然是寻找答案的正确方法。
Netstat 默认使用端口的友好名称/定义(例如,ssh
而不是22
)。添加-n
标志以使用数字主机地址和端口号。此外,添加-p
以显示程序的 PID 和名称。
总之:netstat -anp | grep 4444
可能就是您所需要的。
以下是一个例子:
# netstat -anp | grep 10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 1121/zabbix_agentd
Netstat 还将打印任何其他相关的网络连接,而不仅仅是状态中的套接字LISTEN
。