lazyquit.go 468 B

12345678910111213141516171819202122232425262728293031
  1. package go_lazy_quiter
  2. import (
  3. "os"
  4. "os/signal"
  5. )
  6. type LazyQuiter struct {
  7. qchan chan os.Signal
  8. }
  9. func NewLazyQuiter(sig ...os.Signal) *LazyQuiter {
  10. r := &LazyQuiter{qchan: make(chan os.Signal, 1)}
  11. if sig == nil {
  12. sig = []os.Signal{
  13. os.Interrupt,
  14. os.Kill,
  15. }
  16. }
  17. signal.Notify(r.qchan, sig...)
  18. return r
  19. }
  20. func (q *LazyQuiter) Wait() os.Signal {
  21. return <-q.qchan
  22. }
  23. func (q *LazyQuiter) WaitQuit(return_num int) {
  24. <-q.qchan
  25. os.Exit(return_num)
  26. }