func ParseSignal(rawSignal string) (syscall.Signal, error) {
	s, err := strconv.Atoi(rawSignal)
	if err == nil {
		if s == 0 {
			return -1, fmt.Errorf("Invalid signal: %s", rawSignal)
		}
		return syscall.Signal(s), nil
	}
	signal, ok := SignalMap[strings.TrimPrefix(strings.ToUpper(rawSignal), "SIG")]
	if !ok {
		return -1, fmt.Errorf("Invalid signal: %s", rawSignal)
	}
	return signal, nil
}
ParseSignal translates a string to a valid syscall signal.
It returns an error if the signal map doesn't include the given signal.
package signal
import (
	"fmt"
	"os"
	"os/signal"
	"strconv"
	"strings"
	"syscall"
)
func CatchAll(sigc chan os.Signal) {
	handledSigs := []os.Signal{}
	for _, s := range SignalMap {
		handledSigs = append(handledSigs, s)
	}
	signal.Notify(sigc, handledSigs...)
}
func StopCatch(sigc chan os.Signal) {
	signal.Stop(sigc)
	close(sigc)
}