有时候,我们希望 Go 能智能的处理 Unix 信号。例如,我们希望当服务器接收到一个 |
|
package main
|
|
import "fmt"
import "os"
import "os/signal"
import "syscall"
|
|
func main() {
|
|
Go 通过向一个通道发送 |
sigs := make(chan os.Signal, 1)
done := make(chan bool, 1)
|
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
这个 Go 协程执行一个阻塞的信号接收操作。当它得到一个值时,它将打印这个值,然后通知程序可以退出。 |
go func() {
sig := <-sigs
fmt.Println()
fmt.Println(sig)
done <- true
}()
|
程序将在这里进行等待,直到它得到了期望的信号(也就是上面的 Go 协程发送的 |
fmt.Println("awaiting signal")
<-done
fmt.Println("exiting")
}
|
当我们运行这个程序时,它将一直等待一个信号。使用 |
$ go run signals.go
awaiting signal
^C
interrupt
exiting
|
下一个例子: 退出.