Go捕获系统信号

发布时间 2023-11-20 21:39:05作者: 潜行1

原理

简单来说,main中可以捕获系统的中断信号,并将其传入到 chan中;
原来的main goroutine因为要捕获系统的 interrupt信号,所以需要将原来的代码放入到另外一个goroutine中。

这样做之后,如果不主动处理interrupt信号,程序默认是无法结束的

示例代码:

func main() {
	interrupt := make(chan os.Signal, 5)
	signal.Notify(interrupt, os.Interrupt)
	go setup.Run()
	select {
	case <-interrupt:
		fmt.Println("程序被用户中断")
	}
}

利用这个特性,你可以屏蔽中断信号,或者实行资源释放等操作。

核心函数是signal.Notify这个函数,它会将枚举的参数变量传入至第一个参数的chan中。

Kill我没试