zhangmeng
2020-01-16 be12d77a88a53e4a57d66753956a4ded95213010
app/master/reaper.go
@@ -30,7 +30,7 @@
         logo.Infoln("pid : [", pid, "] quit")
      }
      delete(procMap, pid)
      runProc(ctxt, info.cmd.Path, info.cmd.Args[1:], &info.env)
      runProc(ctxt, info.cmd.Path, info.cmd.Args[1:], info.env)
   } else {
      logo.Errorln(pid, " doesn't exist")
   }
@@ -47,18 +47,31 @@
      logo.Errorln(pid, " doesn't exist")
   }
}
func runProc(ctxt context.Context, bin string, args []string, env *string) (int, error) {
func runProc(ctxt context.Context, bin string, args []string, env string) (int, error) {
   cmd := exec.CommandContext(ctxt, bin, args...)
   cmd.Env = os.Environ()
   cmd.Env = append(cmd.Env, *env)
   rEnv := ""
   if len(env) != 0 {
      runtime := "LD_LIBRARY_PATH"
      rEnv = runtime + "=" + env
      logo.Infoln("Env String: ", rEnv)
      // remove os environ ld
      old := os.Getenv(runtime)
      os.Unsetenv(runtime)
      cmd.Env = os.Environ()
      cmd.Env = append(cmd.Env, rEnv)
      os.Setenv(runtime, old)
   }
   pid := -1
   cmd.Stdout = os.Stdout
   cmd.Stderr = os.Stderr
   cmd.SysProcAttr = &syscall.SysProcAttr{Pdeathsig: syscall.SIGTERM}
   err := cmd.Start()
   if err == nil {
      pid = cmd.Process.Pid
      procMap[pid] = &procInfo{cmd, *env}
      procMap[pid] = &procInfo{cmd, env}
   }
   return pid, err
}