go捕获Ctrl+C信号

我们希望当服务器接收到一个 SIGTERM 信号时能够自动关机,或者做一些善后的操作,以下是实现的方法

package main

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

func main() {
        sigs := make(chan os.Signal, 1)
        done := make(chan bool, 1)

        //设置要接收的信号
        signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

        go func() {
                sig := <-sigs
                fmt.Println()
                fmt.Println(sig)
                done <- true
        }()

        fmt.Println("等待信号")
        <-done
        fmt.Println("进程被终止")
}