mirror of
https://github.com/containers/podman.git
synced 2025-05-17 23:26:08 +08:00

Instead of catching all signals and then ignoring them inside the loop again just don't register them in Notify() to begin with. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
97 lines
3.0 KiB
Go
97 lines
3.0 KiB
Go
//go:build aix || darwin || dragonfly || freebsd || netbsd || openbsd || solaris || zos
|
|
|
|
// Signal handling for Linux only.
|
|
package signal
|
|
|
|
import (
|
|
"syscall"
|
|
)
|
|
|
|
const (
|
|
sigrtmin = 34
|
|
sigrtmax = 64
|
|
|
|
SIGWINCH = syscall.SIGWINCH
|
|
)
|
|
|
|
// SignalMap is a map of Linux signals.
|
|
// These constants are sourced from the Linux version of golang.org/x/sys/unix
|
|
// (I don't see much risk of this changing).
|
|
// This should work as long as Podman only runs containers on Linux, which seems
|
|
// a safe assumption for now.
|
|
var SignalMap = map[string]syscall.Signal{
|
|
"ABRT": syscall.Signal(0x6),
|
|
"ALRM": syscall.Signal(0xe),
|
|
"BUS": syscall.Signal(0x7),
|
|
"CHLD": syscall.Signal(0x11),
|
|
"CLD": syscall.Signal(0x11),
|
|
"CONT": syscall.Signal(0x12),
|
|
"FPE": syscall.Signal(0x8),
|
|
"HUP": syscall.Signal(0x1),
|
|
"ILL": syscall.Signal(0x4),
|
|
"INT": syscall.Signal(0x2),
|
|
"IO": syscall.Signal(0x1d),
|
|
"IOT": syscall.Signal(0x6),
|
|
"KILL": syscall.Signal(0x9),
|
|
"PIPE": syscall.Signal(0xd),
|
|
"POLL": syscall.Signal(0x1d),
|
|
"PROF": syscall.Signal(0x1b),
|
|
"PWR": syscall.Signal(0x1e),
|
|
"QUIT": syscall.Signal(0x3),
|
|
"SEGV": syscall.Signal(0xb),
|
|
"STKFLT": syscall.Signal(0x10),
|
|
"STOP": syscall.Signal(0x13),
|
|
"SYS": syscall.Signal(0x1f),
|
|
"TERM": syscall.Signal(0xf),
|
|
"TRAP": syscall.Signal(0x5),
|
|
"TSTP": syscall.Signal(0x14),
|
|
"TTIN": syscall.Signal(0x15),
|
|
"TTOU": syscall.Signal(0x16),
|
|
"URG": syscall.Signal(0x17),
|
|
"USR1": syscall.Signal(0xa),
|
|
"USR2": syscall.Signal(0xc),
|
|
"VTALRM": syscall.Signal(0x1a),
|
|
"WINCH": syscall.Signal(0x1c),
|
|
"XCPU": syscall.Signal(0x18),
|
|
"XFSZ": syscall.Signal(0x19),
|
|
"RTMIN": sigrtmin,
|
|
"RTMIN+1": sigrtmin + 1,
|
|
"RTMIN+2": sigrtmin + 2,
|
|
"RTMIN+3": sigrtmin + 3,
|
|
"RTMIN+4": sigrtmin + 4,
|
|
"RTMIN+5": sigrtmin + 5,
|
|
"RTMIN+6": sigrtmin + 6,
|
|
"RTMIN+7": sigrtmin + 7,
|
|
"RTMIN+8": sigrtmin + 8,
|
|
"RTMIN+9": sigrtmin + 9,
|
|
"RTMIN+10": sigrtmin + 10,
|
|
"RTMIN+11": sigrtmin + 11,
|
|
"RTMIN+12": sigrtmin + 12,
|
|
"RTMIN+13": sigrtmin + 13,
|
|
"RTMIN+14": sigrtmin + 14,
|
|
"RTMIN+15": sigrtmin + 15,
|
|
"RTMAX-14": sigrtmax - 14,
|
|
"RTMAX-13": sigrtmax - 13,
|
|
"RTMAX-12": sigrtmax - 12,
|
|
"RTMAX-11": sigrtmax - 11,
|
|
"RTMAX-10": sigrtmax - 10,
|
|
"RTMAX-9": sigrtmax - 9,
|
|
"RTMAX-8": sigrtmax - 8,
|
|
"RTMAX-7": sigrtmax - 7,
|
|
"RTMAX-6": sigrtmax - 6,
|
|
"RTMAX-5": sigrtmax - 5,
|
|
"RTMAX-4": sigrtmax - 4,
|
|
"RTMAX-3": sigrtmax - 3,
|
|
"RTMAX-2": sigrtmax - 2,
|
|
"RTMAX-1": sigrtmax - 1,
|
|
"RTMAX": sigrtmax,
|
|
}
|
|
|
|
// isSignalIgnoredBySigProxy determines whether sig-proxy should ignore syscall signal
|
|
func isSignalIgnoredBySigProxy(s syscall.Signal) bool {
|
|
// Ignore SIGCHLD and SIGPIPE - these are most likely intended for the podman command itself.
|
|
// SIGURG was added because of golang 1.14 and its preemptive changes causing more signals to "show up".
|
|
// https://github.com/containers/podman/issues/5483
|
|
return s == syscall.SIGCHLD || s == syscall.SIGPIPE || s == syscall.SIGURG
|
|
}
|