当前位置:首页 > 云计算Golang > 正文内容

GoLang中signal.Notify函数用法介绍

phpmianshi4年前 (2018-04-01)云计算Golang1101

函数声明为:

func Notify(c chan<- os.Signal, sig ...os.Signal)

官方描述:

Notify函数让signal包将输入信号转发到c。如果没有列出要传递的信号,会将所有输入信号传递到c;否则只传递列出的输入信号。

signal包不会为了向c发送信息而阻塞(就是说如果发送时c阻塞了,signal包会直接放弃):调用者应该保证c有足够的缓存空间可以跟上期望的信号频率。对使用单一信号用于通知的通道,缓存为1就足够了。

示例代码:

ch := make(chan os.Signal, 1)
    signal.Notify(ch, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGSTOP, syscall.SIGUSR1)
    for {
        s := <-ch
        switch s {
        case syscall.SIGQUIT:
            log.Infof("SIGSTOP")
            return
        case syscall.SIGSTOP:
            log.Infof("SIGSTOP")
            return
        case syscall.SIGHUP:
            log.Infof("SIGHUP")
            return
        case syscall.SIGKILL:
            log.Infof("SIGKILL")
            return
        case syscall.SIGUSR1:
            log.Infof("SIGUSR1")
            return
        default:
            log.Infof("default")
            return
        }
    }

以上代码告诉 signal ,将对应的信号通知 ch,然后在 for 循环中针对不同信号做不同的处理, for 循环为死循环。


标签: golang
版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

Docker中docker logs查看docker容器日志

概念通过docker logs命令可以查看容器的日志。docker logs -f -t --tail 100 datacenter命令格式:$ docker logs ...

Centos7中安装Docker

核心概念docker的三大核心概念:镜像、容器、仓库镜像:类似虚拟机的镜像、用俗话说就是安装文件。容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,可以将其启动、开始、停止、删除、而这些容器都...

Docker中部署Golang项目

1. 安装docker参考:https://blog.csdn.net/tiancityycf/article/details/1027996462. 默认你已经有一个可以正常运行的golang项目了...

Docker中Dockerfile 中的 COPY 与 ADD 命令

Docker中Dockerfile 中的 COPY 与 ADD 命令

Dockerfile 中提供了两个非常相似的命令 COPY 和 ADD,本文尝试解释这两个命令的基本功能,以及其异同点,然后总结其各自适合的应用场景。Build 上下文的概念在使用 docker bu...

docker 宿主机与容器里文件共享 -v和 VOLUME

在介绍VOLUME指令之前,我们来看下如下场景需求:1)容器是基于镜像创建的,最后的容器文件系统包括镜像的只读层+可写层,容器中的进程操作的数据持久化都是保存在容器的可写层上。一旦容器删除后,这些数据...

Golang中协程调度器底层实现( G、M、P)

三个必知的核心元素。(G、M、P)G:Goroutine的缩写,一个G代表了对一段需要被执行的Go语言代码的封装M:Machine的缩写,一个M代表了一个内核线程,等同于系统线程P:Processor...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。