gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/gox/osx/signalx/signal.go (about)

     1  package signalx
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"os/signal"
     7  	"syscall"
     8  )
     9  
    10  // WaitSignal register signals Handler.
    11  // https://blog.csdn.net/js_xj/article/details/6692440?locationNum=6&fps=1
    12  func WaitSignal(handler func()) {
    13  
    14  	c := make(chan os.Signal, 1)
    15  	signal.Notify(c, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT /*, syscall.SIGSTOP*/, syscall.SIGABRT, syscall.SIGKILL)
    16  	for {
    17  		s := <-c
    18  
    19  		switch s {
    20  		case syscall.SIGQUIT, syscall.SIGTERM /*syscall.SIGSTOP, */, syscall.SIGINT, syscall.SIGABRT, syscall.SIGKILL:
    21  			handler()
    22  		case syscall.SIGHUP:
    23  			handler()
    24  		default:
    25  		}
    26  
    27  		fmt.Println("signal exit: ", s.String())
    28  		os.Exit(0)
    29  	}
    30  }
    31  
    32  func reload() {
    33  }