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


当前回答

在macOS上,这里有一个简单的方法,可以通过netstat获取监听特定端口的进程ID。此示例查找端口80上提供内容的进程:

查找端口80上运行的服务器

netstat -anv | egrep -w [.]80.*LISTEN

样本输出

tcp4  0 0  *.80       *.*    LISTEN      131072 131072    715      0

最后一列的第二个是PID。在上面,它是715。

选项

-a-显示所有端口,包括服务器使用的端口

-n-显示数字,不要查找名称。这使命令更快

-v-verbose输出,以获取进程ID

-w-搜索单词。否则,命令将返回端口8000和8001的信息,而不仅仅是“80”

LISTEN-仅为LISTEN模式下的端口(即服务器)提供信息

其他回答

lsof -n -i | awk '{ print $1,$9; }' | sort -u

这显示了谁在做什么。删除-n以查看主机名(速度稍慢)。

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

lsof -nP -i4TCP:$PORT | grep LISTEN

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

vi ~/.bash_profile

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

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

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

签出此项目/工具: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"

以下是示例输出:

您还可以使用:

sudo lsof -i -n -P | grep TCP

这在小牛队奏效。

在macOS上,这里有一个简单的方法,可以通过netstat获取监听特定端口的进程ID。此示例查找端口80上提供内容的进程:

查找端口80上运行的服务器

netstat -anv | egrep -w [.]80.*LISTEN

样本输出

tcp4  0 0  *.80       *.*    LISTEN      131072 131072    715      0

最后一列的第二个是PID。在上面,它是715。

选项

-a-显示所有端口,包括服务器使用的端口

-n-显示数字,不要查找名称。这使命令更快

-v-verbose输出,以获取进程ID

-w-搜索单词。否则,命令将返回端口8000和8001的信息,而不仅仅是“80”

LISTEN-仅为LISTEN模式下的端口(即服务器)提供信息