// 处理系统信号 // 监听系统信号,重启或停止服务 func trapSignal(server client.Encoder) { sch := make(chan os.Signal, 10) signal.Notify(sch, syscall.SIGTERM, syscall.SIGKILL, syscall.SIGINT, syscall.SIGHUP, syscall.SIGSTOP, syscall.SIGQUIT) go func(ch <-chan os.Signal) { sig := <-ch server.Shutdown("signal recieved " + sig.String() + ", at: " + time.Now().String()) if sig == syscall.SIGHUP { server.Info("autoencode restart now...") procAttr := new(os.ProcAttr) procAttr.Files = []*os.File{nil, os.Stdout, os.Stderr} procAttr.Dir = os.Getenv("PWD") procAttr.Env = os.Environ() process, err := os.StartProcess(os.Args[0], os.Args, procAttr) if err != nil { server.Info("autoencode restart process failed:" + err.Error()) return } waitMsg, err := process.Wait() if err != nil { server.Info("autoencode restart wait error:" + err.Error()) } server.Info(waitMsg) } else { server.Info("autoencode shutdown now...") } }(sch) }