Mac OS X 查看指定 TCP 端口监听进程

Mac OS X 查看指定 TCP 端口监听进程

技术背景

在 Mac OS X 系统中,有时需要了解哪些进程正在监听特定的 TCP 端口,以便进行故障排查、资源管理等操作。不同版本的 Mac OS X 有不同的查看方法。

实现步骤

macOS Big Sur 及更高版本

  • 查看所有监听端口:
1
sudo lsof -i -P | grep LISTEN
  • 查看指定端口监听进程(IPv4 和 IPv6):
1
sudo lsof -i -P | grep LISTEN | grep :$PORT
  • 仅查看 IPv4 指定端口监听进程:
1
sudo lsof -nP -i4TCP:$PORT | grep LISTEN

旧版本 macOS

可使用以下命令查看指定端口监听进程:

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

其他命令

  • 查看所有 TCP 端口(包括 LISTEN、ESTABLISHED 和 CLOSED):
1
sudo lsof -n -i -P | grep TCP
  • 仅查看 LISTEN 端口:
1
sudo lsof -n -i -P | grep LISTEN
  • 查看特定 LISTEN 端口(如 80):
1
sudo lsof -n -i -P | grep ':80 (LISTEN)'
  • 使用 netstat 查看监听端口(无需 sudo):
1
netstat -a -n | grep 'LISTEN '

查找进程 ID(PID)

  • 使用 lsof 查找指定端口的 PID:
1
lsof -t -i :PORT_NUMBER
  • 等效命令:
1
lsof -i :PORT_NUMBER | awk '{ print $2; }' | head -n 2 | grep -v PID

杀死进程

1
kill -9 <PID>

或一行命令杀死指定端口的进程:

1
kill -9 $(lsof -t -i :PORT_NUMBER)

创建 bash 函数

~/.bash_profile 中添加以下函数:

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

保存后,在终端输入 listening_on 80 即可查看哪个进程在监听端口 80。

核心代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看指定端口监听进程(IPv4 和 IPv6)
sudo lsof -i -P | grep LISTEN | grep :$PORT

# 仅查看 IPv4 指定端口监听进程
sudo lsof -nP -i4TCP:$PORT | grep LISTEN

# 查找指定端口的 PID
lsof -t -i :PORT_NUMBER

# 杀死指定端口的进程
kill -9 $(lsof -t -i :PORT_NUMBER)

# 自定义函数查看指定端口监听进程
function listening_on() {
lsof -nP -i4TCP:"$1" | grep LISTEN
}

最佳实践

  • 对于需要频繁查看端口监听情况的用户,可将自定义函数添加到 ~/.bash_profile 中,方便使用。
  • 在使用 grep 查找特定端口时,对于端口号为 255 及以下的情况,可使用 grep --color ":$1 " 避免匹配到 IP 地址、MAC 地址或 PID。

常见问题

  • 权限问题:对于低于 1024 的端口,通常需要使用 sudo 权限才能查看相关信息。
  • 命令执行慢:如果不使用 -n-P 选项,lsof 命令可能会执行较慢,因为需要进行 DNS 查找和端口名称解析。建议使用 -n-P 选项以提高执行速度。

Mac OS X 查看指定 TCP 端口监听进程
https://119291.xyz/posts/mac-os-x-check-tcp-port-listening-process/
作者
ww
发布于
2025年5月20日
许可协议