捕捉和处理信号可以实现优雅start和restart等。golang的signal提供了相关的方法。这里是一个模板,目录结构:
├── sig
│ └── sig.go
└── test.go
先看如何调用:
1.new出一个对象
2.register信号与对应的处理函数
3.定义os.Signal类型的channel,调用signal.Notify
4.for+select循环,原有逻辑放在default分支中。
package main
import (
. "./sig"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
var stopFlag_ bool
func main() {
sigHandler := SignalSetNew()
sigHandler.Register(syscall.SIGQUIT, sigHandlerFunc)
sigHandler.Register(syscall.SIGUSR1, sigHandlerFunc)
sigHandler.Register(syscall.SIGUSR2, sigHandlerFunc)
sigChan := make(chan os.Signal, 10)
signal.Notify(sigChan)
for true {
select {
case sig := <-sigChan:
err := sigHandle