|
@@ -0,0 +1,31 @@
|
|
|
+package go_lazy_quiter
|
|
|
+
|
|
|
+import (
|
|
|
+ "os"
|
|
|
+ "os/signal"
|
|
|
+)
|
|
|
+
|
|
|
+type LazyQuiter struct {
|
|
|
+ qchan chan os.Signal
|
|
|
+}
|
|
|
+
|
|
|
+func NewLazyQuiter(sig ...os.Signal) *LazyQuiter {
|
|
|
+ r := &LazyQuiter{qchan: make(chan os.Signal, 1)}
|
|
|
+ if sig == nil {
|
|
|
+ sig = []os.Signal{
|
|
|
+ os.Interrupt,
|
|
|
+ os.Kill,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ signal.Notify(r.qchan, sig...)
|
|
|
+ return r
|
|
|
+}
|
|
|
+
|
|
|
+func (q *LazyQuiter) Wait() os.Signal {
|
|
|
+ return <-q.qchan
|
|
|
+}
|
|
|
+
|
|
|
+func (q *LazyQuiter) WaitQuit(return_num int) {
|
|
|
+ <-q.qchan
|
|
|
+ os.Exit(return_num)
|
|
|
+}
|