I have a program I'd like to send SIGRTMIN+20, because that's the spelling used in its documentation. Currently, bash only accepts the symbolic names in the signal_names array, meaning I'd have to spell it SIGRTMAX-10 on linux.
One workaround is of course to use kill -n $(($(kill -l SIGRTMIN) + 20)) pid but it's more user-friendly to allow the form kill -s SIGRTMIN+20 pid For symmetry, also accept SIGRTMAX-n expressions. Signed-off-by: Rasmus Villemoes <r...@rasmusvillemoes.dk> --- trap.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/trap.c b/trap.c index eb8ecf3a..dd80c220 100644 --- a/trap.c +++ b/trap.c @@ -242,6 +242,21 @@ decode_signal (string, flags) if (legal_number (string, &sig)) return ((sig >= 0 && sig < NSIG) ? (int)sig : NO_SIG); +#if defined(SIGRTMIN) && defined(SIGRTMAX) + if (STREQN (string, "SIGRTMIN+", 9)) { + if (legal_number (string + 9, &sig) && sig >= 0 && sig <= SIGRTMAX - SIGRTMIN) + return SIGRTMIN + sig; + else + return NO_SIG; + } + if (STREQN (string, "SIGRTMAX-", 9)) { + if (legal_number (string + 9, &sig) && sig >= 0 && sig <= SIGRTMAX - SIGRTMIN) + return SIGRTMAX - sig; + else + return NO_SIG; + } +#endif + /* A leading `SIG' may be omitted. */ for (sig = 0; sig < BASH_NSIG; sig++) { -- 2.16.4