mirror of
https://github.com/rclone/rclone.git
synced 2025-12-17 16:53:22 +00:00
added dependency github.com/sevlyar/go-daemon
This commit is contained in:
59
vendor/github.com/sevlyar/go-daemon/signal.go
generated
vendored
Normal file
59
vendor/github.com/sevlyar/go-daemon/signal.go
generated
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
package daemon
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
// ErrStop should be returned signal handler function
|
||||
// for termination of handling signals.
|
||||
var ErrStop = errors.New("stop serve signals")
|
||||
|
||||
// SignalHandlerFunc is the interface for signal handler functions.
|
||||
type SignalHandlerFunc func(sig os.Signal) (err error)
|
||||
|
||||
// func SetSigHandler sets handler for the given signals.
|
||||
// SIGTERM has the default handler, he returns ErrStop.
|
||||
func SetSigHandler(handler SignalHandlerFunc, signals ...os.Signal) {
|
||||
for _, sig := range signals {
|
||||
handlers[sig] = handler
|
||||
}
|
||||
}
|
||||
|
||||
// func ServeSignals calls handlers for system signals.
|
||||
func ServeSignals() (err error) {
|
||||
signals := make([]os.Signal, 0, len(handlers))
|
||||
for sig, _ := range handlers {
|
||||
signals = append(signals, sig)
|
||||
}
|
||||
|
||||
ch := make(chan os.Signal, 8)
|
||||
signal.Notify(ch, signals...)
|
||||
|
||||
for sig := range ch {
|
||||
err = handlers[sig](sig)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
signal.Stop(ch)
|
||||
|
||||
if err == ErrStop {
|
||||
err = nil
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
var handlers = make(map[os.Signal]SignalHandlerFunc)
|
||||
|
||||
func init() {
|
||||
handlers[syscall.SIGTERM] = sigtermDefaultHandler
|
||||
}
|
||||
|
||||
func sigtermDefaultHandler(sig os.Signal) error {
|
||||
return ErrStop
|
||||
}
|
||||
Reference in New Issue
Block a user