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  }