github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/pkg/signal/signal_linux.go (about) 1 // +build linux 2 3 // Signal handling for Linux only. 4 package signal 5 6 // Copyright 2013-2018 Docker, Inc. 7 8 // NOTE: this package has originally been copied from github.com/docker/docker. 9 10 import ( 11 "os" 12 "os/signal" 13 "syscall" 14 15 "golang.org/x/sys/unix" 16 ) 17 18 const ( 19 sigrtmin = 34 20 sigrtmax = 64 21 22 SIGWINCH = syscall.SIGWINCH // For cross-compilation with Windows 23 ) 24 25 // signalMap is a map of Linux signals. 26 var signalMap = map[string]syscall.Signal{ 27 "ABRT": unix.SIGABRT, 28 "ALRM": unix.SIGALRM, 29 "BUS": unix.SIGBUS, 30 "CHLD": unix.SIGCHLD, 31 "CLD": unix.SIGCLD, 32 "CONT": unix.SIGCONT, 33 "FPE": unix.SIGFPE, 34 "HUP": unix.SIGHUP, 35 "ILL": unix.SIGILL, 36 "INT": unix.SIGINT, 37 "IO": unix.SIGIO, 38 "IOT": unix.SIGIOT, 39 "KILL": unix.SIGKILL, 40 "PIPE": unix.SIGPIPE, 41 "POLL": unix.SIGPOLL, 42 "PROF": unix.SIGPROF, 43 "PWR": unix.SIGPWR, 44 "QUIT": unix.SIGQUIT, 45 "SEGV": unix.SIGSEGV, 46 "STKFLT": unix.SIGSTKFLT, 47 "STOP": unix.SIGSTOP, 48 "SYS": unix.SIGSYS, 49 "TERM": unix.SIGTERM, 50 "TRAP": unix.SIGTRAP, 51 "TSTP": unix.SIGTSTP, 52 "TTIN": unix.SIGTTIN, 53 "TTOU": unix.SIGTTOU, 54 "URG": unix.SIGURG, 55 "USR1": unix.SIGUSR1, 56 "USR2": unix.SIGUSR2, 57 "VTALRM": unix.SIGVTALRM, 58 "WINCH": unix.SIGWINCH, 59 "XCPU": unix.SIGXCPU, 60 "XFSZ": unix.SIGXFSZ, 61 "RTMIN": sigrtmin, 62 "RTMIN+1": sigrtmin + 1, 63 "RTMIN+2": sigrtmin + 2, 64 "RTMIN+3": sigrtmin + 3, 65 "RTMIN+4": sigrtmin + 4, 66 "RTMIN+5": sigrtmin + 5, 67 "RTMIN+6": sigrtmin + 6, 68 "RTMIN+7": sigrtmin + 7, 69 "RTMIN+8": sigrtmin + 8, 70 "RTMIN+9": sigrtmin + 9, 71 "RTMIN+10": sigrtmin + 10, 72 "RTMIN+11": sigrtmin + 11, 73 "RTMIN+12": sigrtmin + 12, 74 "RTMIN+13": sigrtmin + 13, 75 "RTMIN+14": sigrtmin + 14, 76 "RTMIN+15": sigrtmin + 15, 77 "RTMAX-14": sigrtmax - 14, 78 "RTMAX-13": sigrtmax - 13, 79 "RTMAX-12": sigrtmax - 12, 80 "RTMAX-11": sigrtmax - 11, 81 "RTMAX-10": sigrtmax - 10, 82 "RTMAX-9": sigrtmax - 9, 83 "RTMAX-8": sigrtmax - 8, 84 "RTMAX-7": sigrtmax - 7, 85 "RTMAX-6": sigrtmax - 6, 86 "RTMAX-5": sigrtmax - 5, 87 "RTMAX-4": sigrtmax - 4, 88 "RTMAX-3": sigrtmax - 3, 89 "RTMAX-2": sigrtmax - 2, 90 "RTMAX-1": sigrtmax - 1, 91 "RTMAX": sigrtmax, 92 } 93 94 // CatchAll catches all signals and relays them to the specified channel. 95 func CatchAll(sigc chan os.Signal) { 96 handledSigs := make([]os.Signal, 0, len(signalMap)) 97 for _, s := range signalMap { 98 handledSigs = append(handledSigs, s) 99 } 100 signal.Notify(sigc, handledSigs...) 101 } 102 103 // StopCatch stops catching the signals and closes the specified channel. 104 func StopCatch(sigc chan os.Signal) { 105 signal.Stop(sigc) 106 close(sigc) 107 }