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


当前回答

您还可以使用:

sudo lsof -i -n -P | grep TCP

这在小牛队奏效。

其他回答

这是macOS High Sierra的一个好方法:

netstat -an |grep -i listen

灵感来自用户Brent Self:

lsof-i 4-a | grep列表

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

直到macOS 13 Ventura,每个版本的macOS都支持此功能:

sudo lsof-iTCP-sTCP:列表-n-P

就我个人而言,我在~/.bash_profile中使用了这个简单的函数:

listening() {
    if [ $# -eq 0 ]; then
        sudo lsof -iTCP -sTCP:LISTEN -n -P
    elif [ $# -eq 1 ]; then
        sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1
    else
        echo "Usage: listening [pattern]"
    fi
}

然后,listing命令为您提供了一个在某个端口上侦听的进程列表,并为某个模式侦听smthgreps。

有了这一点,很容易询问特定的进程,例如监听dropbox或端口,例如监听22。

lsof命令有一些专门的选项来询问端口、协议、进程等,但就我个人而言,我发现上面的函数更方便,因为我不需要记住所有这些低级选项。lsof是一个非常强大的工具,但不幸的是使用起来不太舒服。

在雪豹(OS X 10.6.8)上,运行“man lsof”可获得:

lsof -i 4 -a

(实际手动输入为“lsof-i 4-a-p 1234”)

之前的答案在雪豹上不起作用,但我一直在尝试使用“netstat-nlp”,直到我看到pts在答案中使用了“lsof”。