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")
}
golang gracefully quit优雅退出
最新推荐文章于 2024-09-19 10:49:02 发布