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  }