美文网首页
gobyexample-signals

gobyexample-signals

作者: bocsoft | 来源:发表于2018-11-06 13:55 被阅读0次

来源: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

相关文章

网友评论

      本文标题:gobyexample-signals

      本文链接:https://www.haomeiwen.com/subject/lacuxqtx.html