Mac OS X 查看指定 TCP 端口监听进程
技术背景
在 Mac OS X 系统中,有时需要了解哪些进程正在监听特定的 TCP 端口,以便进行故障排查、资源管理等操作。不同版本的 Mac OS X 有不同的查看方法。
实现步骤
macOS Big Sur 及更高版本
1
| sudo lsof -i -P | grep LISTEN
|
1
| sudo lsof -i -P | grep LISTEN | grep :$PORT
|
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
|
1
| sudo lsof -n -i -P | grep LISTEN
|
1
| sudo lsof -n -i -P | grep ':80 (LISTEN)'
|
- 使用 netstat 查看监听端口(无需 sudo):
1
| netstat -a -n | grep 'LISTEN '
|
查找进程 ID(PID)
1
| lsof -i :PORT_NUMBER | awk '{ print $2; }' | head -n 2 | grep -v 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
| sudo lsof -i -P | grep LISTEN | grep :$PORT
sudo lsof -nP -i4TCP:$PORT | grep LISTEN
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
选项以提高执行速度。