美文网首页
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 实现程序优雅退出

    go 通过处理系统的 Signal 可以实现程序的优雅退出,go signal 包中的 Notify 函数定义如下...

  • go程

    golang里捕获进程信号实现优雅退出的方法 一、定时与 同步退出 二、锁 互斥锁Mutex Lock,UnLock

  • TODO:Golang Linux进程退出说明

    TODO:Golang Linux进程退出说明 Golang使用os.Exit(code)进程退出导致当前程序退出...

  • golang context提前退出

    golang中context包实现提前退出以前不知道怎么写的,一直无法退出,还以为程序就是无法提前退出。。下面的程...

  • 使用boost::asio::signal_set管理系统信号

    本例建立一个处理系统信号1,和系统信号SIGINT的signal_set,并在收到3次SIGINT后退出。使用Ct...

  • docker 优雅退出

    本文主要阐述如何让 docker 容器优雅的终止。 优雅退出定义 所谓优雅退出,指的是程序在退出之前,有清理资源、...

  • core和vmcore

    什么是core Linux 程序接收到某些signal时退出,生成的退出瞬间的内存镜像。core 文件可用来进行d...

  • 一次golang程序无故频繁重启的问题

    1. 错误日志 程序启动时会打印进程号,同时有系统signal信号捕捉程序,会将程序退出的所有能捕捉的信号都捕捉并...

  • golang for-select 优雅的退出

    启动两个做为生产者的go-routing, 分别将数据生产的数据写入两个带缓冲的通道cha1,ch2 分别模拟在M...

  • 转载:golang 后台服务设计精要

    转载:golang 后台服务设计精要 文章目录 守护进程 优雅的结束进程 响应信号 等待所有协程退出 gorout...

网友评论

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

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