github.com/yasker/longhorn-engine@v0.0.0-20160621014712-6ed6cfca0729/app/shutdown.go (about) 1 package app 2 3 import ( 4 "os" 5 "os/signal" 6 "syscall" 7 ) 8 9 var ( 10 hooks = []func(){} 11 ) 12 13 func addShutdown(f func()) { 14 if len(hooks) == 0 { 15 registerShutdown() 16 } 17 18 hooks = append(hooks, f) 19 } 20 21 func registerShutdown() { 22 c := make(chan os.Signal, 1024) 23 signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) 24 go func() { 25 for range c { 26 for _, hook := range hooks { 27 hook() 28 } 29 os.Exit(1) 30 } 31 }() 32 }