go os.signal 信号控制

发布时间 2023-10-26 16:40:46作者: running-fly
package main

import (
    "fmt"
    "os"
    "os/signal"
    "syscall"
    "time"
)

func main() {

    //创建监听退出chan
    c := make(chan os.Signal)
    //监听指定信号 ctrl+c kill
    signal.Notify(c, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM,
        syscall.SIGQUIT)
    go func() {
        for s := range c {
            switch s {
            case syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT:
                fmt.Println("Program Exit...", s)
                GracefullExit()
            default:
                fmt.Println("other signal", s)
            }
        }
    }()

    fmt.Println("Program Start...")
    sum := 0
    for {
        sum++
        fmt.Println("sum:", sum)
        time.Sleep(time.Second)
    }
}
func GracefullExit() {
    fmt.Println("Start Exit...")
    fmt.Println("Execute Clean...")
    fmt.Println("End Exit...")
    os.Exit(0)
}