美文网首页
golang 处理系统 Signal 实现程序优雅退出

golang 处理系统 Signal 实现程序优雅退出

作者: WangZZ | 来源:发表于2017-12-12 21:51 被阅读364次

    go 通过处理系统的 Signal 可以实现程序的优雅退出,go signal 包中的 Notify 函数定义如下:
    func Notify(c chan<- os.Signal, sig …os.Signal)
    该函数会将进程收到的系统 Signal 转发给 channel c,转发哪些信号由该函数的可变参数决定。

    • 如果你没有传入 sig 参数,那么 Notify 会将系统收到的所有信号转发给c。
    • 如果传入了 sig 参数,则 go 只会关注你传入的 Signal 类型,其他的 Signal 会按照默认方式处理。

    因此你可以在 Notify 函数中传入你要关注和处理的 Signal 类型,通过自定义函数来改变信号对应的行为。

    简单示例代码如下:

    package main
    
    import (
        "fmt"
        "os"
        "os/signal"
        "syscall"
    )
    
    func main() {
        signalChan := make(chan os.Signal, 1)
        signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
        <-signalChan 
        /* 可以在下面定义一些资源回收,代码清理工作 */
        fmt.Println("exit...") 
    }
    

    上述代码监听了如下信号:

    • SIGINT: Ctrl-C 发送 INT signal (SIGINT),通常导致进程结束
    • SIGTERM: 程序结束(terminate)信号
    • 有两种信号不能被拦截和处理: SIGKILL 和 SIGSTOP

    相关文章

      网友评论

          本文标题:golang 处理系统 Signal 实现程序优雅退出

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