将信号分配给通道

通常情况下,当你的程序被操作系统告知停止并采取一些措施来保留状态或清理应用程序时,你将有理由捕获。为此,你可以使用标准库中的 os/signal 包。下面是将所有信号从系统分配到通道的简单示例,然后是如何对这些信号做出反应。

package main

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

func main() {
    // create a channel for os.Signal
    sigChan := make(chan os.Signal)

    // assign all signal notifications to the channel 
    signal.Notify(sigChan)

    // blocks until you get a signal from the OS
    select {
    // when a signal is received
    case sig := <-sigChan:
        // print this line telling us which signal was seen
        fmt.Println("Received signal from OS:", sig)
    }
}

当你运行上述脚本时,它将创建一个通道,然后阻塞,直到该通道收到信号。

$ go run signals.go 
^CReceived signal from OS: interrupt

上面的^C 是发送 SIGINT 信号的键盘命令 CTRL+C