25 lines
648 B
Go
25 lines
648 B
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"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, logger *slog.Logger) {
|
|
ctx, cancel := newShutdownSignalContext(ctx)
|
|
defer cancel()
|
|
<-ctx.Done()
|
|
logger.Debug("received shutdown signal")
|
|
}
|