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  }