2021-12-01 19:22:07 +00:00
|
|
|
package daemon
|
|
|
|
|
|
|
|
import (
|
2023-09-01 11:09:25 +00:00
|
|
|
"log/slog"
|
2021-12-01 19:22:07 +00:00
|
|
|
"os"
|
|
|
|
"os/signal"
|
|
|
|
"syscall"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
Interrupt = os.Interrupt
|
|
|
|
Quit os.Signal = syscall.SIGQUIT
|
|
|
|
Terminate os.Signal = syscall.SIGTERM
|
|
|
|
)
|
|
|
|
|
|
|
|
// WaitForSignal waits until one of the specified signals are received.
|
2022-04-05 19:05:40 +00:00
|
|
|
func WaitForSignal(sig ...os.Signal) os.Signal {
|
2021-12-01 19:22:07 +00:00
|
|
|
ch := make(chan os.Signal, 1)
|
|
|
|
signal.Notify(ch, sig...)
|
|
|
|
s := <-ch
|
2022-04-05 19:05:40 +00:00
|
|
|
|
2023-09-01 11:09:25 +00:00
|
|
|
slog.Debug("Signal caught", "signal", s.String())
|
2022-04-05 19:05:40 +00:00
|
|
|
|
|
|
|
return s
|
2021-12-01 19:22:07 +00:00
|
|
|
}
|
|
|
|
|
2022-04-05 19:05:40 +00:00
|
|
|
// WaitForSignalsDefault waits until one of SIGINT, SIGQUIT or SIGTERM is received.
|
|
|
|
func WaitForSignalsDefault() {
|
2021-12-01 19:22:07 +00:00
|
|
|
WaitForSignal(Interrupt, Quit, Terminate)
|
|
|
|
}
|