Laravel Horizon启动报错:Call to undefined function pcntl_async_signals()
解决Laravel Horizon执行
php artisan horizon时的pcntl函数未定义错误 问题场景
在Windows的XAMPP环境中部署Laravel Horizon,Redis运行于WSL,已安装Predis并完成官方配置,执行php artisan horizon时出现以下错误:
Call to undefined function Laravel\Horizon\Console\pcntl_async_signals()
错误位置:vendor\laravel\horizon\src\Console\HorizonCommand.php:48
原因
pcntl_async_signals()是PHP进程控制扩展(pcntl)中的函数,该扩展仅支持类Unix系统(Linux、macOS等),Windows原生PHP环境默认不包含此扩展,而Horizon依赖pcntl实现进程信号管理,因此在Windows下直接运行Horizon会触发该错误。
解决方案
方案1:在WSL中运行Horizon(推荐)
由于Redis已在WSL中运行,直接在WSL环境中操作Laravel项目:
- 启动WSL终端,切换到你的Laravel项目根目录
- 确保WSL内已安装对应版本的PHP、Composer,且执行
composer install完成依赖安装 - 运行
php artisan horizon启动Horizon
方案2:使用Docker容器运行Horizon
如果习惯用Docker,可以将Laravel项目和Horizon、Redis都部署在Docker容器中,容器环境为类Unix系统,天然支持pcntl扩展:
- 编写
docker-compose.yml配置Laravel、Redis、Horizon服务 - 启动容器后,进入Horizon容器执行
php artisan horizon
内容的提问来源于stack exchange,提问作者Tawhid
相关产品推荐
相关产品推荐

