当cmd在指定的时间内完成时,以下工作正常.但是,超时不起作用.虽然它确实打印"It's dead Jim",但它不仅无法打印"Done waiting",而且该过程实际上并未被杀死.它继续运行,"Done waiting"从不打印.
我认为这是所有相关的代码,但我是Go的新手(这是我尝试过的第一个真正的项目)所以如果这还不够,请告诉我.
func() {
var output bytes.Buffer
cmd := exec.Command("Command", args...)
cmd.Dir = filepath.Dir(srcFile)
cmd.Stdout, cmd.Stderr = &output, &output
if err := cmd.Start(); err != nil {
return err
}
defer time.AfterFunc(time.Second*2, func() {
fmt.Printf("Nobody got time fo that\n")
if err := cmd.Process.Signal(syscall.SIGKILL); err != nil {
fmt.Printf("Error:%s\n", err)
}
fmt.Printf("It's dead Jim\n")
}).Stop()
err := cmd.Wait()
fmt.Printf("Done waiting\n")
}()
Run Code Online (Sandbox Code Playgroud)
我不认为它应该有所作为,但对于命令的价值而言go test html.超时的原因是因为我在运行它之前注入了导致无限循环的错误.为了增加混乱,我试着运行它go test net.有一个超时,它工作正常.