frankenphp启动提示端口占用需先查pid:windows管理员运行netstat -ano | findstr :端口得pid,再tasklist | findstr pid识别进程;pid=4属http.sys驱动不可杀,应禁用w3svc等服务;否则可终止对应进程或改server.address为未占端口,并清理/tmp/frankenphp.sock。

安装 FrankenPHP 时提示端口占用,不是安装失败,而是它启动监听阶段发现目标端口(如 :80、:8000 或你配置的其他端口)已被别的进程抢先绑定。系统不允许重复监听同一端口,必须明确谁在占、能否停、怎么绕过。
先查清楚谁在用这个端口
Windows 用户需以管理员身份打开命令提示符或 PowerShell:
- 执行
netstat -ano | findstr :8000(把8000换成你实际报错的端口号,比如:80或:2019),末尾数字就是 PID - 再执行
tasklist | findstr "1234"(把1234替换为上一步查到的 PID),看进程名是frankenphp.exe、php.exe、System还是Skype.exe等
macOS / Linux 用户可在终端运行:lsof -i :8000 或 sudo netstat -tulnp | grep :8000,直接看到进程名和 PID。
PID 是 4 的 System 进程不能杀
如果查到 PID = 4,且进程名显示 System,说明是 Windows 内核的 HTTP.sys 驱动 在托管该端口(常见于 80/443)。这不是普通进程,绝对不要执行 taskkill /F /PID 4——会导致网络中断甚至蓝屏。
正确做法是:
- 按
Win + R输入services.msc回车 - 找到并停止以下服务(右键 → 停止):
• World Wide Web Publishing Service (W3SVC)
• Web Deployment Agent Service
• SQL Server Reporting Services(如已安装) - 双击每个服务 → “启动类型”改为“禁用”
改监听端口是最简单可靠的方案
比起反复查杀进程,直接让 FrankenPHP 换个空闲端口更安全、通用,也适合多项目共存场景:
- 命令行启动时加参数:
frankenphp serve --addr :8080 - 用配置文件(
frankenphp.toml)修改:[server]<br>address = "127.0.0.1:8080"
- Docker 启动时注意端口映射一致:
docker run -p 8080:8080 ...,同时容器内配置也要指向:8080 - 前端代码里硬写的
http://localhost要同步改成http://localhost:8080,否则请求仍发往旧端口
别忘了清理残留 socket 文件
FrankenPHP 默认可能使用 Unix domain socket(如 /tmp/frankenphp.sock)与 Caddy/Nginx 通信。若上次异常退出未清理,新实例会因 Address already in use 报错,现象和端口冲突一模一样,但实际无关端口。
检查并删除:
- Linux/macOS/WSL:
ls -l /tmp/frankenphp.sock→ 存在则执行rm -f /tmp/frankenphp.sock - Windows:
dir %TEMP%\frankenphp.sock或查看你配置的 socket 路径,手动删除
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











