在Linux上,我可以使用 netstat -pntl | grep $PORT
要么 fuser -n tcp $PORT
找出哪个进程(PID)正在侦听指定的TCP端口。如何在Mac OS X上获得相同的信息?
在Linux上,我可以使用 netstat -pntl | grep $PORT
要么 fuser -n tcp $PORT
找出哪个进程(PID)正在侦听指定的TCP端口。如何在Mac OS X上获得相同的信息?
在macOS High Sierra上,使用以下命令:
lsof -nP -i4TCP:$PORT | grep LISTEN
在旧版本上,使用以下形式之一:
lsof -nP -iTCP:$PORT | grep LISTEN
lsof -nP -i:$PORT | grep LISTEN
替代 $PORT
使用端口号或以逗号分隔的端口号列表。
前置 sudo
(如果您需要有关#1024以下端口的信息,请使用空格)。
该 -n
flag用于显示IP地址而不是主机名。这使得命令执行得更快,因为获取主机名的DNS查找可能很慢(对于许多主机来说,几秒或一分钟)。
该 -P
flag用于显示原始端口号而不是已解析的名称 http
, ftp
或更多深奥的服务名称 dpserve
, socalia
。
有关更多选项,请参阅注释。
您还可以使用:
sudo lsof -i -n -P | grep TCP
这适用于小牛队。
自优胜美地(10.10), 高山脉(10.13),每个版本的macOS都支持这个:
sudo lsof -iTCP -sTCP:LISTEN -n -P
2016年1月更新
真的很惊讶没有人建议:
lsof -i :PORT_NUMBER
获得所需的基本信息。例如,检查端口1337:
lsof -i :1337
其他变化,取决于具体情况:
sudo lsof -i :1337
lsof -i tcp:1337
您可以轻松地在此基础上提取PID本身。例如:
lsof -t -i :1337
这也与此命令等效(结果):
lsof -i :1337 | awk '{ print $2; }' | head -n 2 | grep -v PID
快速插图:
为了完整性,因为经常一起使用:
杀死PID:
kill -9 <PID>
# kill -9 60401
或作为一个班轮:
kill -9 $(lsof -t -i :1337)
这适用于Mavericks(OSX 10.9.2)。
sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
在OS X上,您可以使用netstat的-v选项来提供关联的pid。
类型:
netstat -anv | grep [.]PORT
输出将如下所示:
tcp46 0 0 *.8080 *.* LISTEN 131072 131072 3105 0
PID是最后一列之前的数字,对于这种情况是3105
在macOS上,这是一种简单的方法来获取正在侦听特定端口的进程ID netstat的。此示例查找在端口80上提供内容的进程:
netstat -anv | egrep -w [.]80.*LISTEN
tcp4 0 0 *.80 *.* LISTEN 131072 131072 715 0
最后一列的第二个是PID。在上面,它是 715。
-a
- 显示所有端口,包括服务器使用的端口
-n
- 显示数字,不要查找名称。这使命令成为一个 批量 更快
-v
- 详细输出,以获取进程ID
-w
- 搜索单词。否则命令将返回端口8000和8001的信息,而不仅仅是“80”
LISTEN
- 仅为LISTEN模式下的端口提供信息,即服务器