package main import ( "context" "os" "os/signal" "syscall" ) var shutdownSignals = []os.Signal{os.Interrupt, syscall.SIGTERM} // newShutdownSignalContext returns a copy of the parent context that is marked done // (its Done channel is closed) when one of the shutdownSignals arrives. func newShutdownSignalContext(parent context.Context) (context.Context, context.CancelFunc) { return signal.NotifyContext(parent, shutdownSignals...) } func waitForShutdownSignal(ctx context.Context) { ctx, cancel := newShutdownSignalContext(ctx) defer cancel() <-ctx.Done() }