在os.FindProcess(pid)之后的os.Process.Wait()在不在linux上的windows上工作

在尝试恢复stream程时遇到问题。 我去应用程序启动一堆进程,当它崩溃的过程是在那里打开,当我重新运行我的应用程序,我想恢复我的进程。 在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()与同样的问题

您没有处理来自Wait的错误消息。 尝试:

 ps, err := proc.Cmd.Wait() if err != nil { /* handle it */ } 

另外文件说:

等待进程退出,然后返回描述其状态和错误(如果有的话)的ProcessState。 等待释放与进程相关的任何资源。 在大多数操作系统上,进程必须是当前进程的子进程,否则将返回错误

在你的情况,因为你正在“恢复”,你的进程不是你使用os.FindProcess发现的进程的父。

那么为什么它在Windows上工作? 我怀疑这是因为在Windows上它归结为WaitForSingleObject没有这个要求。