in internal/util/util.go [75:115]
func UnixSignals(sigC chan struct{}, logger *log.Logger) {
// Set up channel on which to send signal notifications.
// We must use a buffered channel or risk missing the signal
// if we're not ready to receive when the signal is sent.
sigc := make(chan os.Signal, 1)
signal.Notify(sigc, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGKILL, syscall.SIGTERM,
syscall.SIGUSR1, syscall.SIGUSR2, syscall.SIGHUP, os.Interrupt)
go func() {
sigType := <-sigc
switch sigType {
//TODO Handle following cases
case os.Interrupt:
//handle SIGINT
case syscall.SIGHUP:
logger.Info("got Hangup/SIGHUP - portable number 1")
case syscall.SIGINT:
logger.Info("got Terminal interrupt signal/SIGINT - portable number 2")
case syscall.SIGQUIT:
logger.Fatal("got Terminal quit signal/SIGQUIT - portable number 3 - will core dump")
case syscall.SIGABRT:
logger.Fatal("got Process abort signal/SIGABRT - portable number 6 - will core dump")
case syscall.SIGKILL:
logger.Info("got Kill signal/SIGKILL - portable number 9")
case syscall.SIGALRM:
logger.Fatal("got Alarm clock signal/SIGALRM - portable number 14")
case syscall.SIGTERM:
logger.Info("got Termination signal/SIGTERM - portable number 15")
case syscall.SIGUSR1:
logger.Info("got User-defined signal 1/SIGUSR1")
case syscall.SIGUSR2:
logger.Info("got User-defined signal 2/SIGUSR2")
default:
logger.Fatal("unhandled Unix signal", zap.Any("sig_type", sigType))
}
sigC <- struct{}{}
return
}()
}