pkg/osutil/interrupt_unix.go
func HandleInterrupts(lg *zap.Logger) {
	notifier := make(chan os.Signal, 1)
	signal.Notify(notifier, syscall.SIGINT, syscall.SIGTERM)

	go func() {
		sig := <-notifier

		interruptRegisterMu.Lock()
		ihs := make([]InterruptHandler, len(interruptHandlers))
		copy(ihs, interruptHandlers)
		interruptRegisterMu.Unlock()

		interruptExitMu.Lock()

		if lg != nil {
			lg.Info("received signal; shutting down", zap.String("signal", sig.String()))
		} else {
			plog.Noticef("received %v signal, shutting down...", sig)
		}

		for _, h := range ihs {
			h()
		}
		signal.Stop(notifier)
		pid := syscall.Getpid()
		// exit directly if it is the "init" process, since the kernel will not help to kill pid 1.
		if pid == 1 {
			os.Exit(0)
		}
		setDflSignal(sig.(syscall.Signal))
		syscall.Kill(pid, sig.(syscall.Signal))
	}()
}
func HandleInterrupts(lg *zap.Logger) {
	notifier := make(chan os.Signal, 1)
	signal.Notify(notifier, syscall.SIGINT, syscall.SIGTERM)

	go func() {
		sig := <-notifier

		interruptRegisterMu.Lock()
		ihs := make([]InterruptHandler, len(interruptHandlers))
		copy(ihs, interruptHandlers)
		interruptRegisterMu.Unlock()

		interruptExitMu.Lock()

		if lg != nil {
			lg.Info("received signal; shutting down", zap.String("signal", sig.String()))
		} else {
			plog.Noticef("received %v signal, shutting down...", sig)
		}

		for _, h := range ihs {
			h()
		}
		signal.Stop(notifier)
		pid := syscall.Getpid()
		// exit directly if it is the "init" process, since the kernel will not help to kill pid 1.
		if pid == 1 {
			os.Exit(0)
		}
		setDflSignal(sig.(syscall.Signal))
		syscall.Kill(pid, sig.(syscall.Signal))
	}()
}
func HandleInterrupts ( lg * zap . Logger ) { notifier := make ( chan os . Signal , 1 ) signal . Notify ( notifier , syscall . SIGINT , syscall . SIGTERM ) go func ( ) { sig := <- notifier interruptRegisterMu . Lock ( ) ihs := make ( [ ] InterruptHandler , len ( interruptHandlers ) ) copy ( ihs , interruptHandlers ) interruptRegisterMu . Unlock ( ) interruptExitMu . Lock ( ) if lg != nil { lg . Info ( " " , zap . String ( " " , sig . String ( ) ) ) } else { plog . Noticef ( " " , sig ) } for _ , h := range ihs { h ( ) } signal . Stop ( notifier ) pid := syscall . Getpid ( ) // exit directly if it is the "init" process, since the kernel will not help to kill pid 1. if pid == 1 { os . Exit ( 0 ) } setDflSignal ( sig . ( syscall . Signal ) ) syscall . Kill ( pid , sig . ( syscall . Signal ) ) } ( ) }
// HandleInterrupts calls the handler functions on receiving a SIGINT or SIGTERM.
HandleInterrupts calls the handler functions on receiving a SIGINT or SIGTERM .