golang程序超时检测

/ go / 没有评论 / 1702浏览

golang程序超时检测

问题描述:在用代码执行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
    }
}