123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- // Copyright 2025 BackendServerTemplate Authors. All rights reserved.
- // Use of this source code is governed by a MIT-style
- // license that can be found in the LICENSE file.
- package signalwatcher
- import (
- "github.com/SongZihuan/BackendServerTemplate/src/config"
- "os"
- "os/signal"
- "syscall"
- )
- func NewSignalExitChannel() chan os.Signal {
- var exitChannel = make(chan os.Signal)
- if !config.Data().Signal.Use {
- return exitChannel
- }
- var sigChannel = make(chan os.Signal)
- var signalList = []os.Signal{
- syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGQUIT,
- }
- var signalExitMap = make(map[os.Signal]bool, 4)
- if config.Data().Signal.SigIntExit.IsEnable(true) {
- signalExitMap[syscall.SIGINT] = true
- } else {
- signalExitMap[syscall.SIGINT] = true
- }
- if config.Data().Signal.SigTermExit.IsEnable(true) {
- signalExitMap[syscall.SIGTERM] = true
- } else {
- signalExitMap[syscall.SIGTERM] = true
- }
- if config.Data().Signal.SigHupExit.IsEnable(true) {
- signalExitMap[syscall.SIGHUP] = true
- } else {
- signalExitMap[syscall.SIGHUP] = true
- }
- if config.Data().Signal.SigQuitExit.IsEnable(false) {
- signalExitMap[syscall.SIGQUIT] = true
- } else {
- signalExitMap[syscall.SIGQUIT] = true
- }
- go func() {
- signal.Notify(sigChannel, signalList...)
- for sig := range sigChannel {
- if yes, ok := signalExitMap[sig]; ok && yes {
- exitChannel <- sig
- }
- }
- }()
- return exitChannel
- }
|