frankenphp端口冲突首选lsof -p -n -i :端口号精准定位,输出中pid和command可识别残留进程(如messenger:consume、旧frankenphp),再kill -15清理;若无输出但启动失败,改用sudo lsof -itcp -stcp:listen | grep :端口号排查系统级监听。

macOS 上用 lsof -i :端口号 查 FrankenPHP 端口冲突最准
FrankenPHP 启动报 bind: address already in use,说明它想监听的端口(比如 :8000 或你配置的 :8080)已被其他进程抢先绑定。macOS 下首选 lsof,因为它直接映射端口到进程,不依赖 DNS 解析,结果干净明确。
打开终端,执行:
lsof -P -n -i :8000
把 8000 换成你实际启动时指定或默认的端口。如果输出为空,说明该端口空闲;如果有结果,重点关注 PID 和 COMMAND 两列:
-
PID是进程唯一编号,后续 kill 用得上 -
COMMAND显示进程名,比如frankenphp、php、nginx或node—— 若是旧 FrankenPHP 进程残留,就该清理 - 若
COMMAND是kernel_task或没显示具体名,可能涉及系统服务(如 AirPlay 接收),需进一步查
查不到 PID?试试 sudo lsof -iTCP -sTCP:LISTEN 全局过滤
有时 lsof -i :8000 没输出,但 FrankenPHP 就是起不来,可能是端口被监听但状态不是典型 TCP 连接(比如 UDP 占了同号端口,或进程用了 SO_REUSEPORT)。这时要强制限定只看 TCP LISTEN 状态:
sudo lsof -iTCP -sTCP:LISTEN | grep :8000
加 sudo 是为了看到 root 或系统级进程;-sTCP:LISTEN 过滤掉 ESTABLISHED、CLOSE_WAIT 等干扰项,确保只列出真正在“等连接”的服务进程。常见误判点:
部署和使用军舰的 macOS Automator 自动化服务集合。包含 5 个实用工作流:PDF转JPG、PNG重命名并转JPG、图像拼接、解压RAR、顺序命名图像文件。一键安装所有服务到 ~/Library/Services/ 目录。使用场景:(1) "安装我的自动化服务",(2) "部署所有 Automato...
- 没加
sudo→ 看不到系统进程(如ControlCenter有时会占:7000) - 漏了
-sTCP:LISTEN→ 输出一堆临时连接,PID 对不上监听者 - 用
netstat -an | grep LISTEN→ macOS 的netstat不带 PID 字段,必须再套ps或回退用lsof
确认是 FrankenPHP 自己没退出,还是别人抢了端口
FrankenPHP 在终端前台运行,关掉终端窗口 ≠ 进程退出。尤其用 Ctrl+Z 挂起、或 IDE 内嵌终端意外关闭后,残留进程常静默监听端口。验证方法很简单:
- 先跑
lsof -P -n -i :8000,看COMMAND是否为frankenphp - 如果是,再执行
ps -p PID -o args=(把PID换成查到的数字),看完整命令行里有没有php-server和--addr参数 —— 有就是它自己没死透 - 如果不是
frankenphp,再查COMMAND是什么:常见竞争者有symfonyCLI、laravelserve、ng serve、rails s,甚至 Docker 容器里的 Nginx
别急着 kill -9,先 ps -p PID 看用户和启动时间——如果是你刚启动的另一个开发服务,改它的端口比杀更安全。
批量查多个端口,避免反复输命令
开发中常同时跑 FrankenPHP(:8000)、前端(:3000)、数据库 UI(:5432),一个一个查太慢。直接一条命令扫清:
lsof -P -n -i :8000 -i :3000 -i :5432
输出按端口分组,一眼看出哪个被占、谁在占。注意:
- Mac 默认
lsof不需要sudo就能查用户进程,但查系统服务(如ControlCenter)仍需sudo - 如果输出里某端口对应多行,说明多个进程在争同一个端口(极少见),优先 kill 掉启动时间早的那个
- 查完别忘了验证:改完端口或 kill 后,立刻
curl -I http://localhost:8000看是否返回HTTP/1.1 200 OK,而不是Connection refused
真正容易被忽略的是:FrankenPHP 的 --addr 参数默认值不统一——有些版本默认 :8000,有些用 :8080,有些甚至读环境变量 FRANKENPHP_ADDR。查冲突前,先确认你启动时实际用的是哪个地址。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










