github.com/stevenmatthewt/agent@v3.5.4+incompatible/signalwatcher/watcher_unix.go (about)

     1  // +build !windows
     2  
     3  package signalwatcher
     4  
     5  import (
     6  	"os"
     7  	"os/signal"
     8  	"syscall"
     9  )
    10  
    11  func Watch(callback func(Signal)) {
    12  	signals := make(chan os.Signal, 1)
    13  	signal.Notify(signals, os.Interrupt,
    14  		syscall.SIGHUP,
    15  		syscall.SIGTERM,
    16  		syscall.SIGINT,
    17  		syscall.SIGQUIT)
    18  
    19  	go func() {
    20  		sig := <-signals
    21  
    22  		if sig == syscall.SIGHUP {
    23  			go callback(HUP)
    24  		} else if sig == syscall.SIGTERM {
    25  			go callback(TERM)
    26  		} else if sig == syscall.SIGINT {
    27  			go callback(INT)
    28  		} else {
    29  			go callback(QUIT)
    30  		}
    31  
    32  		Watch(callback)
    33  	}()
    34  }