get.porter.sh/porter@v1.3.0/pkg/signals/signal.go (about) 1 package signals 2 3 import ( 4 "os" 5 "os/signal" 6 ) 7 8 var onlyOneSignalHandler = make(chan struct{}) 9 10 // SetupSignalHandler registered for SIGTERM and SIGINT. A stop channel is returned 11 // which is closed on one of these signals. If a second signal is caught, the program 12 // is terminated with exit code 1. 13 func SetupSignalHandler() (stopCh <-chan struct{}) { 14 close(onlyOneSignalHandler) // panics when called twice 15 16 stop := make(chan struct{}) 17 c := make(chan os.Signal, 2) 18 signal.Notify(c, shutdownSignals...) 19 go func() { 20 <-c 21 close(stop) 22 <-c 23 os.Exit(1) // second signal. Exit directly. 24 }() 25 26 return stop 27 }