在 macos 上定位占用端口的进程,首选 lsof -i :端口号 命令,可直接获取进程名、pid 和用户;需精确筛选监听状态时用 lsof -itcp -stcp:listen | grep :端口号;netstat -an | grep listen 可交叉验证端口监听状态。

如果您在 macOS 上运行服务时遇到“端口已被占用”错误,或需要确认某个端口是否正被监听,则需定位占用该端口的进程。以下是多种终端方法,可精准识别并获取占用指定端口的程序名称与进程 ID:
一、使用 lsof 命令直接查询指定端口
lsof(List Open Files)将网络端口视为系统文件进行管理,无需额外安装,能直接输出进程名、PID、用户及协议状态,结果可靠且粒度精细。
1、按下 Command + 空格 打开聚焦搜索,输入“终端”并回车启动。
2、在终端中输入命令:lsof -i :端口号,将“端口号”替换为实际数字(例如 8080)。
3、若需跳过 DNS 解析以提升响应速度并避免主机名混淆,使用增强参数:lsof -P -n -i :端口号。
4、执行后,若端口被占用,输出中将包含 COMMAND(进程名)、PID(进程 ID)、USER(所属用户)及 NAME(连接详情)四列;其中 PID 列数值即为进程唯一标识符。
5、若命令无任何输出,则说明该端口当前未被任何进程监听。
二、限定 TCP LISTEN 状态精确筛选
默认 lsof -i :端口号 可能返回 ESTABLISHED 等非监听连接,干扰判断;通过限定 TCP 监听状态,可排除无关条目,仅保留真正绑定端口的服务进程。
1、在终端中输入:lsof -iTCP -sTCP:LISTEN | grep :端口号,将“端口号”替换为实际数字(如 3000)。
2、该命令仅输出处于 LISTEN 状态的 TCP 连接,确保返回结果均为实际占用端口的监听进程。
3、从输出中提取 PID 字段对应数值,用于后续终止操作。
三、使用 netstat 配合 grep 快速验证监听状态
netstat 提供系统级网络连接快照,适用于交叉验证或全局扫描场景,尤其当需确认端口是否处于监听状态而无需立即获取进程详情时。
PyCharm 2026.2.0.1 Mac版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合在macOS系统上进行 Python 项目开发、运行、调试和测试。
1、在终端中运行:netstat -an | grep LISTEN,列出所有监听中的网络端口。
2、进一步过滤目标端口:netstat -an | grep LISTEN | grep :端口号,例如 netstat -an | grep LISTEN | grep :5000。
3、观察输出中“Local Address”列是否出现类似 127.0.0.1:端口号 或 *:端口号 的条目,若存在且状态为 LISTEN,则表明端口正被占用。
四、使用 lsof 一次性查询多个端口
当需并行检查多个开发常用端口(如 3000、5000、8080)时,可单条命令批量查询,避免重复执行,提升排查效率。
1、在终端中输入:lsof -i :3000 -i :5000 -i :8080。
2、命令执行后,每个被占用的端口将显示对应 COMMAND、PID 和 NAME 行;未被占用的端口无任何输出。
3、输出中若含 LISTEN 状态标识,即可确认该端口正被服务监听。
五、通过活动监视器图形化辅助定位进程
对于不熟悉命令行操作的用户,活动监视器提供可视化界面,支持按 PID 或进程名快速筛选,可安全查看资源占用详情,并执行强制退出操作。
1、打开“应用程序 → 实用工具 → 活动监视器”,或通过聚焦搜索启动。
2、点击顶部菜单栏的“查看 → 所有进程”。
3、点击右上角搜索框,输入从 lsof 或 netstat 获取的 PID 数字(例如 12345)。
4、搜索结果自动高亮匹配进程;双击该进程,或点击信息按钮(i 图标)查看其完整路径、启动参数及打开的文件。










