這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
程式可用來定時執行一些任務,並通過訊號量處理,在被強制中斷時,也能做相應警告及清理處理.
package main//訊號量與定時器//author: Xiong Chuan Liang//date: 2015-2-25import "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 := <-sigsswitch 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)<-doneclose(done)//app.Exit()fmt.Println("exiting")}func JobTicker(done <-chan bool) {ticker := time.NewTicker(time.Second)defer ticker.Stop()for {select {case <-done:returncase <-ticker.C:fmt.Println("job......")}}}
如果按 ctrl-C 則結果如下:
awaiting signaljob......job......signal: Interruptinterruptexiting
Go by Example: Signals: https://gobyexample.com/signals
MAIL: xcl_168@aliyun.com
Blog: http://blog.csdn.net/xcl168