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


当前回答

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

其他回答

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

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

类型:

netstat -anv | grep [.]PORT

输出将如下所示:

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

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

在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以查看主机名(速度稍慢)。

这是我所需要的。

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