全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-690-7320

如何在 Composer 脚本中使用 timeout 来防止命令无限期执行?

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

如何在 composer 脚本中使用 timeout 来防止命令无限期执行?

Composer 本身不支持直接为脚本(scripts)设置执行超时,但可以通过操作系统命令包装器实现 timeout 控制,关键在于利用系统级 timeout 工具(Linux/macOS)或 PowerShell(Windows)来包裹实际命令。

Linux/macOS:用 timeout 命令包装脚本

composer.jsonscripts 段中,使用系统 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:用 PowerShell 实现等效 timeout

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 查看详情 挖错网
  • Linux/macOS:bin/run-with-timeout 60 vendor/bin/phpunit
  • Windows:bin\run-with-timeout.ps1 60 vendor\bin\phpunit.bat
  • composer.json 中统一写:"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小时内与您取得联系。