为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Go 不会正确杀死子进程?

为什么 Go 不会正确杀死子进程?

Go
紫衣仙女 2021-07-27 15:57:39
当 cmd 在分配的时间内完成时,以下工作正常。但是,超时不起作用。虽然它确实 print "It's dead Jim",但它不仅无法 print "Done waiting",而且该过程实际上并没有被杀死。它继续运行,"Done waiting"从不打印。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")}()我不认为它应该有所作为,但值得命令的是go test html. 它超时的原因是因为我在运行它之前注入了一个导致无限循环的错误。为了增加混乱,我尝试使用go test net. 有一个超时,它工作正常。
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信