github.com/orangenpresse/up@v0.6.0/internal/signal/signal.go (about) 1 package signal 2 3 import ( 4 "os" 5 "os/signal" 6 "syscall" 7 8 "github.com/apex/up/internal/util" 9 ) 10 11 // close funcs. 12 var fns []Func 13 14 // Init signals channel 15 func init() { 16 s := make(chan os.Signal, 1) 17 go trap(s) 18 signal.Notify(s, syscall.SIGINT) 19 } 20 21 // Func is a close function. 22 type Func func() error 23 24 // Add registers a close handler func. 25 func Add(fn Func) { 26 fns = append(fns, fn) 27 } 28 29 // trap signals to invoke callbacks and exit. 30 func trap(ch chan os.Signal) { 31 <-ch 32 for _, fn := range fns { 33 if err := fn(); err != nil { 34 util.Fatal(err) 35 } 36 } 37 os.Exit(1) 38 }