2:golang程序超时检测

陈玉涛 · · 1145 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

问题描述:在用代码执行adb命令时,由于adb命令长时间没有响应,导致程序一直没法执行完毕
解决办法:给出超时检测,若程序超时,则重新执行一次

//设置超时时间
var Timeout = 30 * time.Second
//超时检测
func Command(name string, arg ...string) (string, error) {
    ctxt, cancel := context.WithTimeout(context.Background(), Timeout)
    defer cancel()
    cmd := exec.CommandContext(ctxt, name, arg...)
        //当经过Timeout时间后,程序依然没有运行完,则会杀掉进程,ctxt也会有err信息
    if out, err := cmd.Output(); err != nil {
        //检测报错是否是因为超时引起的
        if ctxt.Err() != nil && ctxt.Err() == context.DeadlineExceeded {
            return "Timeout", nil
        }
        log.Println("cmd.Output() is fail !------>", err.Error())
        return string(out), err
    } else {
        return string(out), nil
    }
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:陈玉涛

查看原文:2:golang程序超时检测

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1145 次点击  
加入收藏 微博
下一篇:Go channel类型
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传