程序可用来定时执行一些任务,并通过信号量处理,在被强制中断时,也能做相应警告及清理处理.
package main //信号量与定时器 //author: Xiong Chuan Liang //date: 2015-2-25 import "fmt" import "os" import "os/signal" import "time" func main() { sigs := make(chan os.Signal,1) done := make(chan bool,1) signal.Notify(sigs,os.Interrupt,os.Kill) go func() { sig := <-sigs switch sig { case os.Interrupt: fmt.Println("signal: Interrupt") case os.Kill: fmt.Println("signal: Kill") default: fmt.Println("signal: Others") } done <- true }() fmt.Println("awaiting signal") //main().... go JobTicker(done) <-done close(done) //app.Exit() fmt.Println("exiting") } func JobTicker(done <-chan bool) { ticker := time.NewTicker(time.Second) defer ticker.Stop() for { select { case <-done: return case <-ticker.C: fmt.Println("job......") } } }
如果按 ctrl-C 则结果如下:
awaiting signal job...... job...... signal: Interrupt interrupt exiting
Go by Example: Signals: https://gobyexample.com/signals
MAIL: xcl_168@aliyun.com
Blog: http://blog.csdn.net/xcl168
原文地址:https://www.jb51.cc/go/190558.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。