【发布时间】:2020-04-02 11:13:43
【问题描述】:
当命令被上下文取消时,我试图返回特定错误。 在调查 ProcessState 后了解到,如果在 exitCode 中得到 -1,则进程得到终止信号 https://golang.org/pkg/os/#ProcessState.ExitCode 但也许我们有更优雅的方式? 也许我可以从取消功能中删除这个错误? 也许 exitCode 不足以理解命令是否被取消?
var (
CmdParamsErr = errors.New("failed to get params for execution command")
ExecutionCanceled = errors.New("command canceled")
)
func execute(m My) error {
filePath, args, err := cmdParams(m)
err = nil
if err != nil {
log.Infof("cmdParams: err: %v\n, m: %v\n", err, m)
return CmdParamsErr
}
var out bytes.Buffer
var errStd bytes.Buffer
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
cmd := exec.CommandContext(ctx, filePath, args...)
cmd.Stdout = &out
cmd.Stderr = &errStd
err = cmd.Run()
if err != nil {
if cmd.ProcessState.ExitCode() == -1 {
log.Warnf("execution was canceled by signal, err: %v\n", err)
err = ExecutionCanceled
return err
} else {
log.Errorf("run failed, err: %v, filePath: %v, args: %v\n", err, filePath, args)
return err
}
}
return err
}
【问题讨论】: