macOS端口被占用时,可用lsof或netstat查PID,再用kill -9 PID终止进程;也可通过活动监视器图形化强制退出;ps与pgrep可辅助定位进程详情。

如果您在 macOS 上启动本地服务时提示“端口已被占用”,则可能是某个后台进程正在监听该端口。以下是定位并释放端口的具体操作步骤:
一、使用 lsof 命令查询指定端口占用
lsof(List Open Files)将网络端口视为特殊文件进行管理,可直接显示占用目标端口的进程名称、PID、用户及连接状态,是 macOS 下最常用且精准的端口排查工具。
1、按下 Command + 空格 打开聚焦搜索,输入“终端”并回车启动。
2、在终端中输入以下命令,将“端口号”替换为实际需要检查的数字(例如 3000):lsof -i :端口号
3、若需跳过 DNS 解析以加快响应速度并避免混淆,可使用增强参数:lsof -P -n -i :端口号
4、执行后,若端口被占用,将输出类似格式内容:COMMAND、PID、USER、NAME;其中 PID 列的数值即为进程唯一标识符。
5、若命令无任何输出,则说明该端口当前处于空闲状态,未被任何进程监听。
二、使用 netstat 配合 grep 过滤监听端口
netstat 可展示系统级网络连接与监听状态,适用于全局扫描或验证 lsof 结果,尤其在某些精简版系统环境中更稳定可靠。
1、在终端中输入以下命令,列出所有 TCP 协议下处于 LISTEN 状态的端口:netstat -anp tcp | grep LISTEN
2、如需快速定位某端口(例如 8080),直接追加过滤条件:netstat -anp tcp | grep 8080
3、观察输出中的 “Local Address” 字段,若出现 *:8080 或 127.0.0.1:8080 且状态为 LISTEN,则确认该端口正被监听。
4、为获取对应进程 PID,可进一步执行:sudo lsof -iTCP -sTCP:LISTEN | grep 8080
三、通过 kill 命令强制终止占用进程
获得占用端口的 PID 后,可通过 kill 发送信号终止进程;-9 参数确保不可忽略的强制结束,适用于僵死或拒绝响应的进程。
1、在终端中输入以下命令,将“PID”替换为上一步查得的实际数字:kill -9 PID
2、若权限不足导致拒绝操作,需添加 sudo 提权:sudo kill -9 PID
3、执行后无提示即表示命令已提交,系统开始终止进程。
4、立即验证是否释放成功:lsof -i :端口号,若无输出则端口已空闲。
四、使用活动监视器图形化终止进程
活动监视器提供可视化界面,适合不熟悉命令行的用户安全识别和终止进程,支持按 PID 搜索、查看 CPU/内存占用及强制退出功能。
1、打开“应用程序” → “实用工具” → “活动监视器”,或通过聚焦搜索启动。
2、点击右上角搜索框,输入从 lsof 或 netstat 获取的 PID 数值。
3、在结果列表中选中对应进程条目,确保其 COMMAND 列与预期一致(如 node、python、java)。
4、点击窗口左上角的红色“X”按钮,在弹出对话框中选择 强制退出 并确认。
五、使用 ps 与 pgrep 辅助定位进程详情
当 lsof 输出不完整或权限受限时,ps 可结合 pgrep 快速匹配进程名并提取 PID,增强诊断鲁棒性。
1、若已知疑似占用程序名称(如 “node”),执行:pgrep -f node,返回匹配的 PID 列表。
2、对返回的任一 PID,进一步查看完整命令行:ps -p PID -o pid,comm,args
3、若需确认该进程是否监听网络端口,可组合 lsof 查询:lsof -p PID -i
4、确认无误后,仍使用 kill -9 PID 终止。










