Composer不支持脚本超时,需用系统工具实现:Linux/macOS用timeout或gtimeout命令,Windows用PowerShell的Start-Process加WaitForExit,跨平台可封装为独立脚本调用。

Composer 本身不支持直接为脚本(scripts)设置执行超时,但可以通过操作系统命令包装器实现 timeout 控制,关键在于利用系统级 timeout 工具(Linux/macOS)或 PowerShell(Windows)来包裹实际命令。
在 composer.json 的 scripts 段中,使用系统 timeout 命令限制运行时长。例如,限制 PHPUnit 测试最多运行 60 秒:
"scripts": {
"test": "timeout 60 vendor/bin/phpunit --no-coverage"
}注意:
- timeout 60 表示 60 秒后强制终止进程(发送 SIGTERM,可加 -k 发送 SIGKILL);
- 若命令提前完成,timeout 不影响结果;
- 确保系统已安装 GNU coreutils(macOS 需通过 brew install coreutils 安装 gtimeout,并改用 gtimeout 60)。
Windows 默认无 timeout 命令,可用 PowerShell 的 Start-Process + -Wait -TimeoutSec 模拟:
"scripts": {
"test": "powershell -Command "& { $p = Start-Process -FilePath 'vendor\\bin\\phpunit.bat' -ArgumentList '--no-coverage' -PassThru; if (!($p.WaitForExit(60000))) { $p.Kill(); exit 1 } }""
}说明:
- WaitForExit(60000) 等待 60 秒(毫秒单位);
- 超时则调用 $p.Kill() 强制结束;
- exit 1 让 Composer 将其识别为失败,避免后续脚本继续执行。
为避免 composer.json 过于复杂,推荐将带超时逻辑的命令提取为外部脚本(如 bin/run-with-timeout),再在 scripts 中调用:
挖错网
一款支持文本、图片、视频纠错和AIGC检测的内容审核校对平台。
185
查看详情
bin/run-with-timeout 60 vendor/bin/phpunit
bin\run-with-timeout.ps1 60 vendor\bin\phpunit.bat
"test": "bin/run-with-timeout 60 vendor/bin/phpunit"(Composer 会自动适配平台)这样既保持配置简洁,又便于测试和调试超时行为。
基本上就这些。核心是绕过 Composer 自身限制,借助宿主系统能力做进程管控 —— 不复杂但容易忽略。
以上就是如何在 Composer 脚本中使用 timeout 来防止命令无限期执行?的详细内容,更多请关注php中文网其它相关文章!
# linux
# 台州营销推广找哪家
# 地坪网站建设小刘
# 店铺网站如何建设
# 微信朋友圈网络推广营销
# seo教学免费课程霸屏
# 云浮抖音关键词排名优化
# 未来
# 中统
# 器上
# 命令行
# 回调
# 如何解决
# 不支持
# 如何在
# php
# js
# json
# composer
# windows
# 操作系统
# 工具
# mac
# ai
# macos
# win
# 并在
# 营销推广免费学习
# 后台网站建设教程
# seo稻华丽漫游
# 贺州网络推广网站哪家好
相关文章:
网易大神怎么保存别人动态的图片_网易大神动态图片保存方法
没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享
J*aScript map 方法中处理循环元素为空数组的策略
包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址
Lar*el Eloquent:基于关联关系是否存在进行父模型过滤与删除
Python Sounddevice 音频卡顿问题解析与队列数据安全处理
c++20的std::jthread是什么_c++可中断线程与RAII式管理
火锅吃太多会怎样 火锅吃太多会上火吗
随机参数递归函数的基准调用次数与时间复杂度探究
win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】
如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略
AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南
解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException
如何在Promise链中优雅地中断后续then执行
Golang如何优雅处理error_Golang error处理最佳实践总结
CSS子选择器:如何区分并样式化嵌套列表的子层级
c++ 获取系统当前时间 c++时间戳获取方法
Spyder启动失败:字体文件权限拒绝错误解决方案
css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间
Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation
不同用户不同价格! 索尼开启账户个性化定价测试
使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性
Composer如何在生产环境安全地执行composer update
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
微博网页版怎么开启两步验证_微博网页版账号安全两步验证设置方法
C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图
夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案
J*aScript动态修改指定div内所有a标签样式指南
中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
Go语言中构建可靠数据存储的原子性与持久化策略
AO3最新可访问网址 Archive of Our Own官方在线入口
Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】
Lar*el头像管理:图片缩放与旧文件删除的最佳实践
使用 Pandas 高效处理 .dat 文件:字符清理与数据计算
蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版
妖精动漫免费平台 妖精动漫官网资源观看网址
J*a应用集成GitHub CLI与API认证指南
拼多多购物车商品数量无法修改如何处理 拼多多购物车操作优化方法
必由学官网首页入口 必由学教师网页版登录指南
将JSON对象数组转置为键值对列表的实用指南
Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025
天猫2025双十一0点秒杀攻略 天猫爆款抢购时间
基于多条件高效更新SQL表:利用CASE表达式优化业务逻辑
Node.js中HTML按钮与J*aScript函数交互的正确姿势
LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理
CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色
如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略
抓大鹅解压小游戏 抓大鹅摸鱼解压入口
MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具
*请认真填写需求信息,我们会在24小时内与您取得联系。