将信号分配给通道
通常情况下,当你的程序被操作系统告知停止并采取一些措施来保留状态或清理应用程序时,你将有理由捕获。为此,你可以使用标准库中的 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
。