cancel.go 580 B

123456789101112131415161718192021222324252627282930
  1. //go:build linux || darwin
  2. package migrate
  3. import (
  4. "os"
  5. "os/signal"
  6. "syscall"
  7. "github.com/zeromicro/go-zero/core/syncx"
  8. "github.com/zeromicro/go-zero/tools/goctl/util/console"
  9. )
  10. func cancelOnSignals() {
  11. doneChan := syncx.NewDoneChan()
  12. defer doneChan.Close()
  13. go func(dc *syncx.DoneChan) {
  14. c := make(chan os.Signal)
  15. signal.Notify(c, syscall.SIGTERM, syscall.SIGKILL, syscall.SIGINT, syscall.SIGTSTP, syscall.SIGQUIT)
  16. select {
  17. case <-c:
  18. console.Error(`
  19. migrate failed, reason: "User Canceled"`)
  20. os.Exit(0)
  21. case <-dc.Done():
  22. return
  23. }
  24. }(doneChan)
  25. }