core/cmd/twhelp/utils.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")
}