...
1
2
3 package signal
4
5 import (
6 "fmt"
7 "os"
8 "os/signal"
9 "strconv"
10 "strings"
11 "syscall"
12 )
13
14
15
16
17 func CatchAll(sigc chan os.Signal) {
18 var handledSigs []os.Signal
19 for n, s := range SignalMap {
20 if n == "URG" {
21
22
23 continue
24 }
25 handledSigs = append(handledSigs, s)
26 }
27 signal.Notify(sigc, handledSigs...)
28 }
29
30
31 func StopCatch(sigc chan os.Signal) {
32 signal.Stop(sigc)
33 close(sigc)
34 }
35
36
37
38 func ParseSignal(rawSignal string) (syscall.Signal, error) {
39 s, err := strconv.Atoi(rawSignal)
40 if err == nil {
41 if s == 0 {
42 return -1, fmt.Errorf("invalid signal: %s", rawSignal)
43 }
44 return syscall.Signal(s), nil
45 }
46 signal, ok := SignalMap[strings.TrimPrefix(strings.ToUpper(rawSignal), "SIG")]
47 if !ok {
48 return -1, fmt.Errorf("invalid signal: %s", rawSignal)
49 }
50 return signal, nil
51 }
52
53
54 func ValidSignalForPlatform(sig syscall.Signal) bool {
55 for _, v := range SignalMap {
56 if v == sig {
57 return true
58 }
59 }
60 return false
61 }
62
View as plain text