github.com/AlpineAIO/wails/v2@v2.0.0-beta.32.0.20240505041856-1047a8fa5fef/internal/signal/signal.go (about) 1 package signal 2 3 import ( 4 "os" 5 gosignal "os/signal" 6 "sync" 7 "syscall" 8 ) 9 10 var signalChannel = make(chan os.Signal, 2) 11 12 var ( 13 callbacks []func() 14 lock sync.Mutex 15 ) 16 17 func OnShutdown(callback func()) { 18 lock.Lock() 19 defer lock.Unlock() 20 callbacks = append(callbacks, callback) 21 } 22 23 // Start the Signal Manager 24 func Start() { 25 // Hook into interrupts 26 gosignal.Notify(signalChannel, os.Interrupt, syscall.SIGTERM, syscall.SIGINT) 27 28 // Spin off signal listener and wait for either a cancellation 29 // or signal 30 go func() { 31 <-signalChannel 32 println("") 33 println("Ctrl+C detected. Shutting down...") 34 for _, callback := range callbacks { 35 callback() 36 } 37 }() 38 }