/*
go信号处理
有的时候我们希望go能够智能地处理unix信号
例如我们希望一个server接收到一个SIGTERM信号后
能够自动地停止
使用channel来处理信号
*/
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
)
func main() {
//go信号通知通过向一个channel发送os.Signal来实现
/*
我们将创建一个channel来接收这些通知
同时我们还用一个channel来在程序退出的时候通知我们
*/
sigs := make(chan os.Signal, 1)
done := make(chan bool, 1)
//signal.Notify在给定的signal上面注册改channel
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
//这个协程阻塞等待信号的到来 当信号到来的时候 输出改信号 然后通知程序结束
go func() {
sig := <-sigs
fmt.Println()
fmt.Println(sig)
done <- true
}()
//程序将等待接受信号然后退出
<-done
}