golang gracefully quit优雅退出

func main() {
	fmt.Println("main start")
	defer func() {
		fmt.Println("bye main from defer")
	}()

	sig := make(chan os.Signal)
	signal.Notify(sig, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGHUP)
	go func() {
		for s := range sig {
			switch s {
			// 手动退出时打印退出码
			case syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGHUP:
				quit()
				if i, ok := s.(syscall.Signal); ok {
					os.Exit(int(i))
				} else {
					os.Exit(0)
				}
			}
		}
	}()

	wait := make(chan bool)
	go func() {
		// 睡眠10秒钟自动退出
		time.Sleep(10 * time.Second)
		close(wait)
	}()
	<-wait

	fmt.Println("main end")
}

func quit() {
	fmt.Println("gracefully quit")
}


版权声明:本文为Zx13170918986原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。