github.com/apptainer/singularity@v3.1.1+incompatible/internal/pkg/util/signal/signal.go (about) 1 // Copyright (c) 2018, Sylabs Inc. All rights reserved. 2 // This software is licensed under a 3-clause BSD license. Please consult the 3 // LICENSE.md file distributed with the sources of this project regarding your 4 // rights to use or distribute this software. 5 6 package signal 7 8 import ( 9 "fmt" 10 "strconv" 11 "strings" 12 "syscall" 13 ) 14 15 var signalMap = map[string]syscall.Signal{ 16 "SIGHUP": syscall.SIGHUP, 17 "SIGINT": syscall.SIGINT, 18 "SIGQUIT": syscall.SIGQUIT, 19 "SIGILL": syscall.SIGILL, 20 "SIGTRAP": syscall.SIGTRAP, 21 "SIGABRT": syscall.SIGABRT, 22 "SIGBUS": syscall.SIGBUS, 23 "SIGFPE": syscall.SIGFPE, 24 "SIGKILL": syscall.SIGKILL, 25 "SIGUSR1": syscall.SIGUSR1, 26 "SIGSEGV": syscall.SIGSEGV, 27 "SIGUSR2": syscall.SIGUSR2, 28 "SIGPIPE": syscall.SIGPIPE, 29 "SIGALRM": syscall.SIGALRM, 30 "SIGTERM": syscall.SIGTERM, 31 "SIGSTKFLT": syscall.SIGSTKFLT, 32 "SIGCHLD": syscall.SIGCHLD, 33 "SIGCONT": syscall.SIGCONT, 34 "SIGSTOP": syscall.SIGSTOP, 35 "SIGTSTP": syscall.SIGTSTP, 36 "SIGTTIN": syscall.SIGTTIN, 37 "SIGTTOU": syscall.SIGTTOU, 38 "SIGURG": syscall.SIGURG, 39 "SIGXCPU": syscall.SIGXCPU, 40 "SIGXFSZ": syscall.SIGXFSZ, 41 "SIGVTALRM": syscall.SIGVTALRM, 42 "SIGPROF": syscall.SIGPROF, 43 "SIGWINCH": syscall.SIGWINCH, 44 "SIGIO": syscall.SIGIO, 45 "SIGPWR": syscall.SIGPWR, 46 "SIGSYS": syscall.SIGSYS, 47 } 48 49 const signalMax = syscall.SIGSYS 50 51 // Convert converts a signal string to corresponding signal number 52 func Convert(sig string) (syscall.Signal, error) { 53 var sigNum syscall.Signal 54 55 if strings.HasPrefix(sig, "SIG") { 56 if sigNum, ok := signalMap[sig]; ok { 57 return sigNum, nil 58 } 59 } 60 61 if sigNum, ok := signalMap["SIG"+sig]; ok { 62 return sigNum, nil 63 } 64 65 sigConv, err := strconv.ParseInt(sig, 10, 32) 66 if err == nil { 67 if sigConv <= int64(signalMax) && sigConv > 0 { 68 return syscall.Signal(sigConv), nil 69 } 70 } 71 72 return sigNum, fmt.Errorf("can't convert %s to signal number", sig) 73 }