如何查看正在使用端口的 java 进程

如何查看正在使用端口的 java 进程

我有一个在端口 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

相关内容