-
Notifications
You must be signed in to change notification settings - Fork 46
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #70 from thaJeztah/integrate_moby_signal_take2
migrate github.com/docker/docker/pkg/signal (take 2)
- Loading branch information
Showing
13 changed files
with
492 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
module github.com/moby/sys/signal | ||
|
||
go 1.13 | ||
|
||
require golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= | ||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
// Package signal provides helper functions for dealing with signals across | ||
// various operating systems. | ||
package signal | ||
|
||
import ( | ||
"fmt" | ||
"os" | ||
"os/signal" | ||
"strconv" | ||
"strings" | ||
"syscall" | ||
) | ||
|
||
// CatchAll catches all signals and relays them to the specified channel. | ||
// SIGURG is not handled, as it's used by the Go runtime to support | ||
// preemptable system calls. | ||
func CatchAll(sigc chan os.Signal) { | ||
var handledSigs []os.Signal | ||
for n, s := range SignalMap { | ||
if n == "URG" { | ||
// Do not handle SIGURG, as in go1.14+, the go runtime issues | ||
// SIGURG as an interrupt to support preemptable system calls on Linux. | ||
continue | ||
} | ||
handledSigs = append(handledSigs, s) | ||
} | ||
signal.Notify(sigc, handledSigs...) | ||
} | ||
|
||
// StopCatch stops catching the signals and closes the specified channel. | ||
func StopCatch(sigc chan os.Signal) { | ||
signal.Stop(sigc) | ||
close(sigc) | ||
} | ||
|
||
// ParseSignal translates a string to a valid syscall signal. | ||
// It returns an error if the signal map doesn't include the given signal. | ||
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 | ||
} | ||
|
||
// ValidSignalForPlatform returns true if a signal is valid on the platform | ||
func ValidSignalForPlatform(sig syscall.Signal) bool { | ||
for _, v := range SignalMap { | ||
if v == sig { | ||
return true | ||
} | ||
} | ||
return false | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package signal | ||
|
||
import ( | ||
"syscall" | ||
) | ||
|
||
// SignalMap is a map of Darwin signals. | ||
var SignalMap = map[string]syscall.Signal{ | ||
"ABRT": syscall.SIGABRT, | ||
"ALRM": syscall.SIGALRM, | ||
"BUG": syscall.SIGBUS, | ||
"CHLD": syscall.SIGCHLD, | ||
"CONT": syscall.SIGCONT, | ||
"EMT": syscall.SIGEMT, | ||
"FPE": syscall.SIGFPE, | ||
"HUP": syscall.SIGHUP, | ||
"ILL": syscall.SIGILL, | ||
"INFO": syscall.SIGINFO, | ||
"INT": syscall.SIGINT, | ||
"IO": syscall.SIGIO, | ||
"IOT": syscall.SIGIOT, | ||
"KILL": syscall.SIGKILL, | ||
"PIPE": syscall.SIGPIPE, | ||
"PROF": syscall.SIGPROF, | ||
"QUIT": syscall.SIGQUIT, | ||
"SEGV": syscall.SIGSEGV, | ||
"STOP": syscall.SIGSTOP, | ||
"SYS": syscall.SIGSYS, | ||
"TERM": syscall.SIGTERM, | ||
"TRAP": syscall.SIGTRAP, | ||
"TSTP": syscall.SIGTSTP, | ||
"TTIN": syscall.SIGTTIN, | ||
"TTOU": syscall.SIGTTOU, | ||
"URG": syscall.SIGURG, | ||
"USR1": syscall.SIGUSR1, | ||
"USR2": syscall.SIGUSR2, | ||
"VTALRM": syscall.SIGVTALRM, | ||
"WINCH": syscall.SIGWINCH, | ||
"XCPU": syscall.SIGXCPU, | ||
"XFSZ": syscall.SIGXFSZ, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package signal | ||
|
||
import ( | ||
"syscall" | ||
) | ||
|
||
// SignalMap is a map of FreeBSD signals. | ||
var SignalMap = map[string]syscall.Signal{ | ||
"ABRT": syscall.SIGABRT, | ||
"ALRM": syscall.SIGALRM, | ||
"BUF": syscall.SIGBUS, | ||
"CHLD": syscall.SIGCHLD, | ||
"CONT": syscall.SIGCONT, | ||
"EMT": syscall.SIGEMT, | ||
"FPE": syscall.SIGFPE, | ||
"HUP": syscall.SIGHUP, | ||
"ILL": syscall.SIGILL, | ||
"INFO": syscall.SIGINFO, | ||
"INT": syscall.SIGINT, | ||
"IO": syscall.SIGIO, | ||
"IOT": syscall.SIGIOT, | ||
"KILL": syscall.SIGKILL, | ||
"LWP": syscall.SIGLWP, | ||
"PIPE": syscall.SIGPIPE, | ||
"PROF": syscall.SIGPROF, | ||
"QUIT": syscall.SIGQUIT, | ||
"SEGV": syscall.SIGSEGV, | ||
"STOP": syscall.SIGSTOP, | ||
"SYS": syscall.SIGSYS, | ||
"TERM": syscall.SIGTERM, | ||
"THR": syscall.SIGTHR, | ||
"TRAP": syscall.SIGTRAP, | ||
"TSTP": syscall.SIGTSTP, | ||
"TTIN": syscall.SIGTTIN, | ||
"TTOU": syscall.SIGTTOU, | ||
"URG": syscall.SIGURG, | ||
"USR1": syscall.SIGUSR1, | ||
"USR2": syscall.SIGUSR2, | ||
"VTALRM": syscall.SIGVTALRM, | ||
"WINCH": syscall.SIGWINCH, | ||
"XCPU": syscall.SIGXCPU, | ||
"XFSZ": syscall.SIGXFSZ, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
// +build !mips,!mipsle,!mips64,!mips64le | ||
|
||
package signal | ||
|
||
import ( | ||
"syscall" | ||
|
||
"golang.org/x/sys/unix" | ||
) | ||
|
||
const ( | ||
sigrtmin = 34 | ||
sigrtmax = 64 | ||
) | ||
|
||
// SignalMap is a map of Linux signals. | ||
var SignalMap = map[string]syscall.Signal{ | ||
"ABRT": unix.SIGABRT, | ||
"ALRM": unix.SIGALRM, | ||
"BUS": unix.SIGBUS, | ||
"CHLD": unix.SIGCHLD, | ||
"CLD": unix.SIGCLD, | ||
"CONT": unix.SIGCONT, | ||
"FPE": unix.SIGFPE, | ||
"HUP": unix.SIGHUP, | ||
"ILL": unix.SIGILL, | ||
"INT": unix.SIGINT, | ||
"IO": unix.SIGIO, | ||
"IOT": unix.SIGIOT, | ||
"KILL": unix.SIGKILL, | ||
"PIPE": unix.SIGPIPE, | ||
"POLL": unix.SIGPOLL, | ||
"PROF": unix.SIGPROF, | ||
"PWR": unix.SIGPWR, | ||
"QUIT": unix.SIGQUIT, | ||
"SEGV": unix.SIGSEGV, | ||
"STKFLT": unix.SIGSTKFLT, | ||
"STOP": unix.SIGSTOP, | ||
"SYS": unix.SIGSYS, | ||
"TERM": unix.SIGTERM, | ||
"TRAP": unix.SIGTRAP, | ||
"TSTP": unix.SIGTSTP, | ||
"TTIN": unix.SIGTTIN, | ||
"TTOU": unix.SIGTTOU, | ||
"URG": unix.SIGURG, | ||
"USR1": unix.SIGUSR1, | ||
"USR2": unix.SIGUSR2, | ||
"VTALRM": unix.SIGVTALRM, | ||
"WINCH": unix.SIGWINCH, | ||
"XCPU": unix.SIGXCPU, | ||
"XFSZ": unix.SIGXFSZ, | ||
"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, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
// +build linux | ||
// +build mips mipsle mips64 mips64le | ||
|
||
package signal | ||
|
||
import ( | ||
"syscall" | ||
|
||
"golang.org/x/sys/unix" | ||
) | ||
|
||
const ( | ||
sigrtmin = 34 | ||
sigrtmax = 127 | ||
) | ||
|
||
// SignalMap is a map of Linux signals. | ||
var SignalMap = map[string]syscall.Signal{ | ||
"ABRT": unix.SIGABRT, | ||
"ALRM": unix.SIGALRM, | ||
"BUS": unix.SIGBUS, | ||
"CHLD": unix.SIGCHLD, | ||
"CLD": unix.SIGCLD, | ||
"CONT": unix.SIGCONT, | ||
"FPE": unix.SIGFPE, | ||
"HUP": unix.SIGHUP, | ||
"ILL": unix.SIGILL, | ||
"INT": unix.SIGINT, | ||
"IO": unix.SIGIO, | ||
"IOT": unix.SIGIOT, | ||
"KILL": unix.SIGKILL, | ||
"PIPE": unix.SIGPIPE, | ||
"POLL": unix.SIGPOLL, | ||
"PROF": unix.SIGPROF, | ||
"PWR": unix.SIGPWR, | ||
"QUIT": unix.SIGQUIT, | ||
"SEGV": unix.SIGSEGV, | ||
"EMT": unix.SIGEMT, | ||
"STOP": unix.SIGSTOP, | ||
"SYS": unix.SIGSYS, | ||
"TERM": unix.SIGTERM, | ||
"TRAP": unix.SIGTRAP, | ||
"TSTP": unix.SIGTSTP, | ||
"TTIN": unix.SIGTTIN, | ||
"TTOU": unix.SIGTTOU, | ||
"URG": unix.SIGURG, | ||
"USR1": unix.SIGUSR1, | ||
"USR2": unix.SIGUSR2, | ||
"VTALRM": unix.SIGVTALRM, | ||
"WINCH": unix.SIGWINCH, | ||
"XCPU": unix.SIGXCPU, | ||
"XFSZ": unix.SIGXFSZ, | ||
"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, | ||
} |
Oops, something went wrong.