来源:https://github.com/xg-wang/gobyexample/tree/master/examples
//Go能够智能的处理Unix信号,例如,我们希望当服务器接受到一个`SIGTERM`信号时能够自动关机,或者
//一个命令行 工具在接收到一个`SIGINT`信号时停止处理输入信息。
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
)
func main() {
//Go 通过向一个通道发送`os.Singal`值来进行信号通知。我们将创建一个
//通道来接收这些通知(同时还创建一个用于程序可以结束时进行通知的通道)
sigs := make(chan os.Signal, 1)
done := make(chan bool, 1)
//`signal.Notify`注册这个给定的通道用于接收特定信号
signal.Notify(sigs,syscall.SIGINT,syscall.SIGTERM)
//这个Go协程执行一个阻塞的信号接收操作。当它得到一个值时,它将打印这个值,然后通知程序可以退出
go func() {
sig := <-sigs
fmt.Println()
fmt.Println("sig",sig)
done <- true
}()
//程序将在这里进行等待,直到它得到了期望的信号(也就是上面的Go协程发送的`done`值),然后退出
fmt.Println("awaitinig signal")
<-done
fmt.Println("exiting")
}
输出结果:
awaitinig signal
sig interrupt
exiting
网友评论