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
}
}
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2021/03/28 01:27