github.com/gogf/gf@v1.16.9/.example/os/gproc/signal/signal_handler.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"os/signal"
     7  	"syscall"
     8  	"time"
     9  )
    10  
    11  func signalHandlerForMQ() {
    12  	var (
    13  		sig          os.Signal
    14  		receivedChan = make(chan os.Signal)
    15  	)
    16  	signal.Notify(
    17  		receivedChan,
    18  		syscall.SIGINT,
    19  		syscall.SIGQUIT,
    20  		syscall.SIGKILL,
    21  		syscall.SIGTERM,
    22  		syscall.SIGABRT,
    23  	)
    24  	for {
    25  		sig = <-receivedChan
    26  		fmt.Println("MQ is shutting down due to signal:", sig.String())
    27  		time.Sleep(time.Second)
    28  		fmt.Println("MQ is shut down smoothly")
    29  		return
    30  	}
    31  }
    32  
    33  func main() {
    34  	fmt.Println("Process start, pid:", os.Getpid())
    35  	go signalHandlerForMQ()
    36  
    37  	var (
    38  		sig          os.Signal
    39  		receivedChan = make(chan os.Signal)
    40  	)
    41  	signal.Notify(
    42  		receivedChan,
    43  		syscall.SIGINT,
    44  		syscall.SIGQUIT,
    45  		syscall.SIGKILL,
    46  		syscall.SIGTERM,
    47  		syscall.SIGABRT,
    48  	)
    49  	for {
    50  		sig = <-receivedChan
    51  		fmt.Println("MainProcess is shutting down due to signal:", sig.String())
    52  		return
    53  	}
    54  }