package utils | |
import ( | |
"context" | |
"fmt" | |
"os" | |
"os/signal" | |
"syscall" | |
) | |
// CancelOnInterruptContext returns a context that's cancelled if the process receives a SIGINT or | |
// SIGTERM interrupt. | |
func CancelOnInterruptContext(ctx context.Context) context.Context { | |
ctx, cancel := context.WithCancel(context.Background()) | |
sigs := make(chan os.Signal, 1) | |
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) | |
go func() { | |
sig := <-sigs | |
fmt.Printf("Signal received: %v\n", sig) | |
cancel() | |
}() | |
return ctx | |
} |