9 // OnSignalCB callback type for signal
10 type OnSignalCB func(sig os.Signal)
13 type MonSignals struct {
14 callback map[string][]OnSignalCB
15 registeredSignals []os.Signal
20 // MonitorSignals Routine used to monitor signals (eg. SIGINT, SIGTERM, ...)
21 func MonitorSignals() {
23 monSig.callback = make(map[string][]OnSignalCB)
24 monSig.registeredSignals = GetRegisteredSignals()
26 sigs := make(chan os.Signal, 1)
27 signal.Notify(sigs, monSig.registeredSignals...)
32 Log.Debugf("Detect signal %v", sig)
33 if cbArr, exist := monSig.callback[sig.String()]; exist {
34 for _, cb := range cbArr {
42 // isSupportSignal Check if a signal is supported or not
43 func isSupportSignal(sig os.Signal) bool {
44 for _, s := range monSig.registeredSignals {
52 // OnSignal Register a callback for a specified signal
53 func OnSignal(sig os.Signal, fCB OnSignalCB) error {
54 if !isSupportSignal(sig) {
55 return fmt.Errorf("unsupported signal %v", sig)
57 sigStr := sig.String()
58 monSig.callback[sigStr] = append(monSig.callback[sigStr], fCB)
62 // OnSignals Register a callback for any signals
63 func OnSignals(fCB OnSignalCB) error {
64 for _, s := range monSig.registeredSignals {
65 if err := OnSignal(s, fCB); err != nil {