github.com/scottcagno/storage@v1.8.0/pkg/util/sigint.go (about) 1 package util 2 3 import ( 4 "log" 5 "os" 6 "os/signal" 7 "syscall" 8 ) 9 10 func HandleSignalInterrupt(msg string, args ...interface{}) { 11 log.Printf(msg, args...) 12 log.Println("Please press ctrl+c to exit.") 13 c := make(chan os.Signal) 14 signal.Notify(c, os.Interrupt, syscall.SIGTERM) 15 go func() { 16 <-c 17 os.Exit(1) 18 }() 19 } 20 21 func HandleSigInt(fn func()) { 22 log.Println("Please press ctrl+c to exit.") 23 c := make(chan os.Signal) 24 signal.Notify(c, os.Interrupt, syscall.SIGTERM) 25 go func() { 26 <-c 27 fn() 28 os.Exit(1) 29 }() 30 } 31 32 func ShutdownHook(fn func()) { 33 log.Println("Please press ctrl+c to exit.") 34 c := make(chan os.Signal) 35 signal.Notify(c, syscall.SIGINT, syscall.SIGKILL, syscall.SIGTERM) 36 go func() { 37 sig := <-c 38 log.Printf("Received signal: %q (%d)\n", sig, sig) 39 if fn != nil { 40 fn() 41 } 42 os.Exit(1) 43 }() 44 }