本文整理汇总了Golang中syscall.SysProcAttr.Setpgid方法的典型用法代码示例。如果您正苦于以下问题:Golang SysProcAttr.Setpgid方法的具体用法?Golang SysProcAttr.Setpgid怎么用?Golang SysProcAttr.Setpgid使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类syscall.SysProcAttr
的用法示例。
在下文中一共展示了SysProcAttr.Setpgid方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: solverWorker
func (ctx *context) solverWorker() {
conn := ctx.pool.Get()
defer conn.Close()
for r := range ctx.solverch {
var arg string
if r.IsIR {
arg = "-action=ir"
} else {
arg = "-action=inst"
}
cmd := exec.Command(os.Args[0]+"-backend", arg, os.Args[1])
cmd.Stdin = strings.NewReader(r.Req)
var outb, errb bytes.Buffer
cmd.Stdout = &outb
cmd.Stderr = &errb
var sys syscall.SysProcAttr
sys.Setpgid = true
cmd.SysProcAttr = &sys
err := cmd.Start()
if err != nil {
os.Stdout.Write([]byte("Error invoking solver: " + err.Error() + "\n"))
r.result <- solverResp{"", friendlyError{"Error invoking solver", err}}
continue
}
timeout := false
timer := time.AfterFunc(10*time.Second, func() {
syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)
timeout = true
})
err = cmd.Wait()
timer.Stop()
if timeout {
os.Stdout.Write([]byte("Solver timeout\n"))
r.result <- solverResp{"", friendlyError{"Solver timeout", nil}}
} else if err != nil {
r.result <- solverResp{"", friendlyError{"Error invoking solver", err}}
} else if errb.Len() != 0 {
r.result <- solverResp{"", friendlyError{errb.String(), nil}}
} else {
r.result <- solverResp{outb.String(), nil}
}
}
}