func UnixSignals()

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
	}()
}