您的当前位置:首页>全部文章>文章详情

端口被占用,杀死他

发表于:2026-04-19 10:41:32浏览:2次TAG: #nginx #webman

Warning: stream_socket_server(): Unable to connect to tcp://0.0.0.0:8787 (以一种访问权限不允许的方式做了一个访问套接字的尝试。) in E:\Home\webman\vendor\workerman\workerman\src\Worker.php on line 2460 RuntimeException: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 in E:\Home\webman\vendor\workerman\workerman\src\Worker.php:2462

这个错误表明 8787 端口已被占用,通常是因为之前的 webman 进程没有完全退出,或者有残留的 PHP 进程仍在运行。

🎯 快速解决方案

方案一:结束所有 PHP 进程(最有效)

bash
# 以管理员身份运行 CMD,然后执行:
taskkill /f /im php.exe

# 如果上面命令无效,尝试强制结束所有相关进程:
taskkill /f /im php-cgi.exe
taskkill /f /im php-fpm.exe

方案二:查找并结束占用 8787 端口的进程

bash
# 1. 查看占用 8787 端口的进程 PID
netstat -ano | findstr :8787

# 输出示例:TCP 0.0.0.0:8787 0.0.0.0:0 LISTENING 12345
# 最后一列 12345 就是 PID

# 2. 结束该进程(将 12345 替换为实际的 PID)
taskkill /f /pid 12345

方案三:更换端口

修改 config/server.php

php
return [
    // 将 8787 改为其他未占用的端口,如 8080
    'listen' => 'http://0.0.0.0:8080',
    // ...
];

然后重启 webman:

bash
php start.php start

方案四:以管理员身份运行

右键点击命令提示符,选择 "以管理员身份运行",然后重新启动:

bash
php start.php start

🔍 根本原因与预防

为什么会出现这个错误?

  1. Windows 下进程未完全退出:按 Ctrl+C 停止 webman 时,某些子进程可能残留。

  2. 端口被其他程序占用:如 8787 被 QQ、微信、迅雷等程序占用。

  3. 权限不足:Windows 下某些端口需要管理员权限才能绑定。

预防措施

  1. 使用 restart 命令(推荐):

    bash
    php start.php restart

    这会自动停止旧进程并启动新进程。

  2. 创建停止脚本 stop.sh

    bash
    taskkill /f /im php.exe
  3. 使用进程管理工具

    • 使用 php start.php status 查看进程状态

    • 使用 php start.php stop 停止所有进程(需要配置)

📝 完整操作步骤

bash
# 1. 以管理员身份打开 CMD

# 2. 进入项目目录
cd E:\Home\webman

# 3. 强制结束所有 PHP 进程
taskkill /f /im php.exe

# 4. 等待 2 秒
timeout /t 2

# 5. 重新启动
php start.php start

# 6. 如果还是不行,尝试更换端口
# 修改 config/server.php 中的端口为 8788

🚨 如果还是不行

检查是否有其他程序占用了 8787 端口:

bash
# 列出所有监听端口
netstat -ano | findstr LISTENING

# 查找 8787 端口
netstat -ano | findstr 8787

如果找到其他程序(非 PHP),可以:

  1. 结束该程序

  2. 或者更换 webman 端口

重启电脑也是最后的备选方案,可以清理所有残留进程和端口占用。

执行方案一后问题应该能解决。如果还有问题,请告诉我 netstat -ano | findstr :8787 的输出结果。