summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/io/signal/signal.go18
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
}