github.com/influxdata/influxdb/v2@v2.7.6/kit/signals/context.go (about) 1 package signals 2 3 import ( 4 "context" 5 "os" 6 "os/signal" 7 ) 8 9 // WithSignals returns a context that is canceled with any signal in sigs. 10 func WithSignals(ctx context.Context, sigs ...os.Signal) context.Context { 11 sigCh := make(chan os.Signal, 1) 12 signal.Notify(sigCh, sigs...) 13 14 ctx, cancel := context.WithCancel(ctx) 15 go func() { 16 defer cancel() 17 select { 18 case <-ctx.Done(): 19 return 20 case <-sigCh: 21 return 22 } 23 }() 24 return ctx 25 } 26 27 // WithStandardSignals cancels the context on os.Interrupt, os.Kill. 28 func WithStandardSignals(ctx context.Context) context.Context { 29 return WithSignals(ctx, os.Interrupt, os.Kill) 30 }