func start_signal(pid int, cfg *g.GlobalConfig) { sigs := make(chan os.Signal, 1) log.Println(pid, "register signal notify") signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) for { s := <-sigs log.Println("recv", s) switch s { case syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT: log.Println("gracefull shut down") if cfg.Http.Enabled { http.Close_chan <- 1 <-http.Close_done_chan } log.Println("http stop ok") if cfg.Rpc.Enabled { api.Close_chan <- 1 <-api.Close_done_chan } log.Println("rpc stop ok") rrdtool.Out_done_chan <- 1 rrdtool.FlushAll(true) log.Println("rrdtool stop ok") log.Println(pid, "exit") os.Exit(0) } } }
func start_signal(pid int, conf g.GlobalConfig) { sigs := make(chan os.Signal, 1) log.Println(pid, "register signal notify") signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) for { s := <-sigs log.Println("recv", s) switch s { case syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT: log.Println("gracefull shut down") http.Close_chan <- 1 api.Close_chan <- 1 cron.Out_done_chan <- 1 <-http.Close_done_chan <-api.Close_done_chan log.Println(pid, "remove ", conf.Pid) os.Remove(conf.Pid) rrdtool.FlushAll() log.Println(pid, "flush done, exiting") os.Exit(0) } } }