信号管控

在 Go 语言中管控进程信号,非常简单。只需要简单的 3 行代码即可完成:

package main

import "os/signal"

func main() {
    //信号接收 channel
    sigCh := make(chan os.Signal, 1)
    
    //监听信号(所有信号)
    signal.Notify(sigCh)

    //信号触发
    sig := <-sigch
    //TODO
}

为了更加方便在项目中集成,重新对以上功能代码进行一次简单的封装。如下:

package main

import (
	"context"
	"log"
	"syscall"

	"github.com/x-mod/sigtrap"
)

func main() {
  ctx, cancel := context.WithCancel(context.Background())
  
	capture := sigtrap.New(
		sigtrap.Trap(syscall.SIGINT, sigtrap.Handler(cancel)),
		sigtrap.Trap(syscall.SIGTERM, sigtrap.Handler(cancel)),
	)
	defer capture.Close()
	log.Println("sigtrap: waiting ...")
	log.Println("sigtrap:", capture.Serve(ctx))
}

可以直接参考项目源码: github.com/x-mod/sigtrap.

← 版本控制 glog改造 →

评论