新闻中心
如何在 Composer 脚本中使用 timeout 来防止命令无限期执行?
Composer不支持脚本超时,需用系统工具实现:Linux/macOS用timeout或gtimeout命令,Windows用PowerShell的Start-Process加WaitForExit,跨平台可封装为独立脚本调用。

Composer 本身不支持直接为脚本(scripts)设置执行超时,但可以通过操作系统命令包装器实现 timeout 控制,关键在于利用系统级 timeout 工具(Linux/macOS)或 PowerShell(Windows)来包裹实际命令。
Linux/macOS:用 timeout 命令包装脚本
在 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:用 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中文网其它相关文章!
# 如何解决
# 贺州网络推广网站哪家好
# seo稻华丽漫游
# 后台网站建设教程
# 营销推广免费学习
# 台州营销推广找哪家
# 地坪网站建设小刘
# 店铺网站如何建设
# 微信朋友圈网络推广营销
# seo教学免费课程霸屏
# 云浮抖音关键词排名优化
# 未来
# 中统
# 器上
# 命令行
# 回调
# php
# 不支持
# 并在
# 如何在
# win
# macos
# ai
# mac
# 工具
# 操作系统
# windows
# composer
# json
# js
# linux
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】
京东单号查询入口_京东快递订单追踪入口
CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色
知音漫客官网漫画下载_知音漫客网页版阅读记录
Python字典中优雅地迭代剩余元素的方法
机器学习中对数变换预测结果的反向还原
J*aScript生成器_j*ascript异步迭代
零跑汽车11月交付量达70327台 实现连续9个月正增长
在Go Martini框架中高效服务动态生成图像的实践指南
最新韩小圈网页版登录入口_官网在线观看官方链接
深入理解J*a编译器的兼容性选项:从-source到--release
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战
Python自定义类排序:解决lambda键值访问TypeError的实践指南
jQuery Mask 插件中实现电话号码固定前导零的教程
在FastAPI中利用lifespan与依赖注入高效管理Redis连接池
yy漫画网页版官方入口_yy漫画官网登录页面链接
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用
PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符
PHP URL参数传递与500错误调试指南
Angular响应式表单:实现提交后表单及按钮的禁用与只读化
钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧
支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样
蓝湖怎样用切图标注提对接效率_蓝湖用切图标注提对接效率【设计对接】
QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台
《刺客信条:影》PS5 Pro和Switch 2画面对比
新手怎么开始学化妆 零基础化妆入门教程
J*aScript异步迭代器_j*ascript异步遍历
Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程
实现分段式页面滚动导航:CSS与J*aScript教程
WordPress插件开发:正确注册卸载钩子与避免常见陷阱
Composer如何解决json扩展缺失的错误
Mac怎么使用表情符号_Mac Emoji快捷键面板
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
必由学官网首页入口 必由学教师网页版登录指南
Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】
字由网在线版登录地址 字由网网页版安全入口
Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践
网易大神账号申诉需要多久_网易大神账号申诉流程说明
Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】
学习通网页版快速入口 学习通官网网页版直接打开
C++ explicit关键字防止隐式转换_C++构造函数安全规范
J*aScript实现单选按钮与关联输入框的联动禁用教程
Python大型XML文件高效流式解析教程
韩剧圈正版入口页面_韩剧圈官网登录链接
Go语言中对Map值调用带指针接收者方法:原理与最佳实践
Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖
移动端XML文件怎么转换成Excel 手机和平板上的解决方案


2025-12-14
浏览次数:次
返回列表