如何在Mac上知道端口名称或pid的情况下查询一个进程正在使用的端口?

sta*_*ang 2 macos shell

我想查询一个进程正在使用的端口,我知道该进程的pid正在使用ps aux | grep <name regex of process>,但是我不知道如何获取它正在使用的端口。在linux上,我们可以使用netstat -anp | grep <pid>,但是命令没有在Mac上工作,它会抛出这样的提示:

netstat: option requires an argument -- p
Usage:  netstat [-AaLlnW] [-f address_family | -p protocol]
netstat [-gilns] [-f address_family]
netstat -i | -I interface [-w wait] [-abdgRtS]
netstat -s [-s] [-f address_family | -p protocol] [-w wait]
netstat -i | -I interface -s [-f address_family | -p protocol]
netstat -m [-m]
netstat -r [-Aaln] [-f address_family]
netstat -rs [-s]
Run Code Online (Sandbox Code Playgroud)

看起来它需要一个参数-p来指定协议的类型,但是我不想要也不知道该类型,然后感谢您如何解决我的问题!

这是Mac上的问题,很容易检查,因此我希望所有答案都能在Mac机器上首先测试您的解决方案。也许答案不是单一的,所以我正在等待您提出不同但有用的答案。谢谢所有谁注意这个问题。

mtt*_*trb 5

在OS X上,您可以使用-v开关获取持有端口的进程的PID 。该-v开关实际上接通详细输出其中包括PID。

如果您netstat -anp在Linux 上使用,那么我相信您应该能够在OS X上获得类似的结果netstat -anv

如果您仅对inet端口感兴趣,则可以使用:

netstat -anvf inet
Run Code Online (Sandbox Code Playgroud)

或TCP套接字:

netstat -anvp tcp
Run Code Online (Sandbox Code Playgroud)

或UDP套接字:

netstat -anvp udp
Run Code Online (Sandbox Code Playgroud)

要仅返回特定PID的TCP条目,例如,PID == 86您可以netstat通过awk以下管道传递输出:

netstat -anvp tcp | awk '{ if ($9 == 86) print }'
Run Code Online (Sandbox Code Playgroud)

netstatPID 的详细输出在第九列,因此测试$9 == 86


agc*_*agc -1

BSD netstat与Linux netstat有点不同,OSX 使用 BSD netstat。

使用-p, (将显示限制为单个协议族,例如 等),而不是使用开关, -f inet(将显示限制为单个协议)。或者使用的缩写。inetinet6-4-f inet

 -4      Is shorthand for -f inet

 -6      Is shorthand for -f inet6

 -f   address_family, -p protocol
 Limit display to those records of the specified address_family or a
 single protocol.  The following address families and protocols are
 recognized:

 Family              Protocols
 inet (AF_INET)          divert, icmp, igmp, ip, ipsec, pim,
                 sctp, tcp, udp
 inet6 (AF_INET6)        icmp6, ip6, ipsec6, rip6, tcp, udp
 pfkey (PF_KEY)          pfkey
 atalk (AF_APPLETALK)        ddp
 netgraph, ng (AF_NETGRAPH)  ctrl, data
 ipx (AF_IPX)            ipx, spx
 unix (AF_UNIX)
 link (AF_LINK)
Run Code Online (Sandbox Code Playgroud)

-来自 BSD 'man netstat'