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


当前回答

这是我所需要的。

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

其他回答

在最新的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 Big Sur和更高版本上,使用以下命令:

sudo lsof -i -P | grep LISTEN | grep :$PORT

或者只看到IPv4:

sudo lsof -nP -i4TCP:$PORT | grep LISTEN

对于旧版本,请使用以下表单之一:

sudo lsof -nP -iTCP:$PORT | grep LISTEN
sudo lsof -nP -i:$PORT | grep LISTEN

用端口号或逗号分隔的端口号列表替换$PORT。

如果需要有关#1024以下端口的信息,请在sudo前面加上空格。

-n标志用于显示IP地址而不是主机名。这使得命令执行得更快,因为获取主机名的DNS查找可能会很慢(对于许多主机来说几秒钟或一分钟)。

-P标志用于显示原始端口号,而不是解析名称(如http、ftp)或更深奥的服务名称(如dpserve、socalia)。

有关更多选项,请参见注释。

为了完整,因为经常一起使用:

要终止PID:

sudo kill -9 <PID>
# kill -9 60401

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

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

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

您还可以使用:

sudo lsof -i -n -P | grep TCP

这在小牛队奏效。

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