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

GoLang中signal.Notify函数用法介绍

phpmianshi3年前 (2018-04-01)Golang682

函数声明为:

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面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

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

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

发表评论

访客

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