在Linux上,我可以使用netstat-pntl | grep$PORT或fuser-n tcp$PORT来确定哪个进程(PID)正在侦听指定的tcp端口。如何在Mac OS X上获得相同的信息?


当前回答

对于macOS,我使用两个命令一起显示有关在机器上侦听的进程和连接到远程服务器的进程的信息。换句话说,要检查主机上的侦听端口和当前(TCP)连接,可以同时使用以下两个命令

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

我想我会添加我的输入,希望它最终能帮助某人。

其他回答

签出此项目/工具:procs

在MacOs上安装:brew安装过程

这允许您控制使用proc显示的内容。

要查看TCP/UDP端口,请在安装工具后将以下内容添加到~/.procs.toml。

[[columns]]
kind = "TcpPort"
style = "BrightYellow|Yellow"
numeric_search = true
nonnumeric_search = false
align = "Left"

[[columns]]
kind = "UdpPort"
style = "BrightGreen|Green"
numeric_search = false
nonnumeric_search = true
align = "Left"

以下是示例输出:

在最新的macOS版本上,可以使用以下命令:

lsof -nP -i4TCP:$PORT | grep LISTEN

如果你觉得很难记住,那么也许你应该创建一个bash函数,并用一个更友好的名称来导出它

vi ~/.bash_profile

然后将以下行添加到该文件并保存。

function listening_on() {
    lsof -nP -i4TCP:"$1" | grep LISTEN
}

现在,您可以在终端中键入listening_on 80,并查看哪个进程正在侦听端口80。

对MichałKalinowski的回答稍有改进(我没有足够的声誉在那里留下评论):如果您试图发现进程正在监听一个编号为255及以下的端口,grep命令可能会打印与IP地址相关的行,而这些行与期望的结果不符。对于任何编号的端口,grep命令也可能错误地匹配设备的MAC地址或PID。为了改进这一点,我建议将命令更改为grep--color“:$1”

在OS X上,可以使用netstat的-v选项来提供相关的pid。

类型:

netstat -anv | grep [.]PORT

输出将如下所示:

tcp46      0      0  *.8080                 *.*                    LISTEN      131072 131072   3105      0

PID是最后一列之前的数字,在本例中为3105

我是一个Linux人。在Linux中,使用netstat-ltpn或这些字母的任何组合都非常容易。但在Mac OS X netstat中,grep LISTEN是最人性化的。其他的非常难看,在排除故障时很难记住。