PHP8.5.4 + Swoole6.2 无法正常退出进程

Wakada

问题描述

php start.php start 启动后,直接关闭调试,正常无报错,
但启动后,通过http访问接口后,就无法正常关闭调试,会报错;

尝试把 eventLoop 选项置空不使用swoole则正常不报错;

主要是这个错误信息量太少不知道哪里抛出来,麻烦大佬们看看是什么问题。

补充下问题:
如果请求的业务逻辑涉及到db查询(mysql8、5.7均是),则会出现该问题,移除swoole后正常。

程序代码

process.php

'eventLoop'   => Workerman\Events\Swoole::class

报错信息

/app # php start.php start
Workerman[start.php] start in DEBUG mode
--------------------------------------------- WORKERMAN ---------------------------------------------
Workerman/5.1.10        PHP/8.5.4 (JIT off)           Linux/6.12.76-linuxkit
---------------------------------------------- WORKERS ----------------------------------------------
event-loop  proto       user        worker      listen                  count       state            
swoole      tcp         root        webman      http://0.0.0.0:23401    4            [OK]            
event       tcp         root        monitor     none                    1            [OK]            
-----------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.

^C Workerman[start.php] received signal SIGINT
Workerman[start.php] stopping
PHP Fatal error:  Couldn't execute method Error::__toString in Unknown on line 0
Stack trace:
#0 {main}

Fatal error: Couldn't execute method Error::__toString in Unknown on line 0
Stack trace:
#0 {main}
Workerman[start.php] has been stopped

截图报错信息里报错文件相关代码

截图

操作系统及workerman/webman等框架组件具体版本

新项目,使用php8.5.4 + swoole6.2 + Webman2.2
Docker基础镜像:php:8.5.4-cli-apline
swoole 编译安装启用了iouring特性 --enable-iouring --enable-uring-socket

255 2 0
2个回答

walkor 打赏

可能是swoole版本问题,换个swoole版本试下

  • 暂无评论
北月妖王
<?php

namespace app\process;

use Webman\App;
use support\Db;

class Http extends App
{
    public function onWorkerStop($worker) 
    {
        try {
          $pools = \Closure::bind(static function () {
              return \Webman\Database\DatabaseManager::$pools;
          }, null, \Webman\Database\DatabaseManager::class)();

          foreach ($pools as $pool) {
              $pool->closeConnections();
          }
      } catch (\Throwable $e) {}
    }
}
  • Wakada 2026-03-22

    看到是链接池问题,正无从下手,感谢大佬👍

🔝