尝试在 go 中恢复进程时遇到问题。我的 go 应用程序启动了一堆进程,当它崩溃时,这些进程是公开的,当我重新运行我的应用程序时,我想恢复我的进程。在 Windows 上,一切都按预期工作,我可以wait()处理kill()它等等。但在 linux 中,它只是通过我的过程wait()而没有任何错误。这是代码
func (proc *process) Recover() {
pr, err := os.FindProcess(proc.Cmd.Process.Pid)
if err != nil {
return
}
log.Info("Recovering " + proc.Name + proc.Service.Version)
Processes.Lock()
Processes.Map[proc.Name] = proc
Processes.Unlock()
proc.Cmd.Process = pr
if proc.Service.Reload > 0 {
proc.End = make(chan bool)
go proc.KillRoutine()
}
proc.Cmd.Wait()
if proc.Status != "killed" {
proc.Status = "finished"
}
proc.Time = time.Now()
channelProcess <- proc
//confirmation that process was killed
if proc.End != nil {
proc.End <- true
}
}
进程是我自己的结构来处理进程重要的部分是来自包的 cmd"os/exec" 我也尝试直接调用pr.wait()相同的问题
江户川乱折腾
相关分类