diff options
| -rw-r--r-- | internal/io/signal/signal.go | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/internal/io/signal/signal.go b/internal/io/signal/signal.go index 3785d71..9401707 100644 --- a/internal/io/signal/signal.go +++ b/internal/io/signal/signal.go @@ -4,6 +4,7 @@ import ( "context" "os" gosignal "os/signal" + "syscall" "time" "github.com/mimecast/dtail/internal/io/logger" @@ -11,26 +12,31 @@ import ( // StatsCh returns a channel for "please print stats" signalling. func InterruptCh(ctx context.Context) <-chan struct{} { - sigCh := make(chan os.Signal) - gosignal.Notify(sigCh, os.Interrupt) + sigIntCh := make(chan os.Signal) + gosignal.Notify(sigIntCh, os.Interrupt) + + sigOtherCh := make(chan os.Signal) + gosignal.Notify(sigOtherCh, syscall.SIGHUP, syscall.SIGTERM, syscall.SIGQUIT) statsCh := make(chan struct{}) go func() { for { select { - case <-sigCh: + case <-sigIntCh: select { case statsCh <- struct{}{}: - logger.Info("Hit Ctrl+C twice to exit") + logger.Info("Hint: Hit Ctrl+C twice to exit") select { - case <-sigCh: + case <-sigIntCh: os.Exit(0) case <-time.After(time.Second): } default: - // Stats currently already printed. + // Stats already printed. } + case <-sigOtherCh: + os.Exit(0) case <-ctx.Done(): return } |
