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


当前回答

这是我所需要的。

ps -eaf | grep `lsof -t -i:$PORT`

其他回答

在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模式下的端口(即服务器)提供信息

灵感来自用户Brent Self:

lsof-i 4-a | grep列表

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

类型:

netstat -anv | grep [.]PORT

输出将如下所示:

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

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

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

lsof -nP -i4TCP:$PORT | grep LISTEN

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

vi ~/.bash_profile

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

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

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

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

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

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