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

我有一个在端口4444上运行的小型Java ServerSocket应用程序。我想在OSXterminal中看到使用该端口的进程,我的第一个想法是执行以下操作:

netstat -a | grep 4444 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呢?

Mac OSX基于BSD,因此Mac OSX下的netstat将无法向您显示pid /进程名称。 正如你已经知道的那样, lsof是正确的select。

编辑 :包含在Mac OSX中的Netstat版本不像在其他发行版(协议而不是程序)中那样解释-p标志,所以尽pipeNetstat可能因为下面列出的原因而不起作用,但lsof仍然是正确的方式去寻求答案。

默认情况下,Netstat使用友好的名称/定义的端口(例如, ssh而不是22 )。 添加-n标志以使用数字主机地址和端口号。 另外,添加-p来显示程序的PID和名称。

总结: netstat -anp | grep 4444 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也将打印任何其他相关的networking连接,而不仅仅是处于LISTEN状态的套接字。