端口占用是thinkphp6.2配合think-swoole启动时的常见问题,核心解决步骤为查(netstat或lsof查pid)、杀(优先kill再kill-9)、换(修改config/swoole.php端口并避免冲突)。

端口占用是 ThinkPHP6.2 配合 think-swoole 启动时最常遇到的卡点,不是代码写错了,而是已有进程在监听同一个端口。处理核心就三点:查、杀、换。
快速定位哪个进程占了端口
别猜,直接查。假设你配置的是默认端口 9501:
-
netstat -anp | grep :9501(Linux 常用) -
lsof -i :9501(macOS 或装了 lsof 的 Linux) - 看到 PID(比如 29854),说明这个进程正占着端口
干净关闭旧进程
找到 PID 后,别用 kill -9 粗暴强杀,优先尝试优雅退出:
-
kill 29854(发送 TERM 信号,让 Swoole 自行释放资源) - 等几秒没反应再执行
kill -9 29854 - 如果用的是守护模式(
daemonize => true),记得先查ps aux | grep swoole,有时会残留多个 worker 进程
开发阶段主动避开冲突
与其每次撞上再解决,不如从配置源头规避:
- 把端口改成非默认值,比如
'port' => 9502或8080,写在config/swoole.php里 - 开发环境一律用 ≥1024 的端口,避免权限问题和与 Nginx/Apache 冲突
- 上线时用 Nginx 反向代理到本地高编号端口(如
127.0.0.1:9502),不直接暴露 Swoole 端口
检查是否重复启动或残留 PID 文件
think-swoole 默认会生成 runtime/swoole.pid,如果上次异常退出,PID 文件可能还在,导致新启动时误判为“已在运行”:
- 手动删掉
runtime/swoole.pid - 确认
config/swoole.php中'pid_file'路径是否可写 - 启动前加个判断:
if (file_exists($pidFile)) { unlink($pidFile); }
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











