IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    golang信号处理

    mckee发表于 2016-04-09 18:36:19
    love 0

    信号(signal)是unix及其兼容系统用来对进程通讯的一种方式,如果改进程注册了signal handler,当收到signal时会被调用,否则缺省处理程序被调用。只有两种信号不能被拦截和处理: SIGKILL和SIGSTOP
    os/signal包中提供了Notify函数对signal进行处理,

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

    实现过程很简单:首先我们创建一个os.Signal channel,当进程接受到信号时,系统会往该channel中写入发生的信号。
    package main
    
    import (
    	"fmt"
    	"os"
    	"os/signal"
    	"time"
    )
    
    func main() {
    	go signalListen()
    	time.Sleep(time.Hour)
    }
    
    func signalListen() {
    	c := make(chan os.Signal)
    	signal.Notify(c)
    	for {
    		s := <-c
    		//handle
    		fmt.Println("get signal:", s)
    		os.Exit(1)
    	}
    }



沪ICP备19023445号-2号
友情链接