* tests/env/env-signal-handler.sh: Test that --ignore-signal with no
options also ignores real-time signals. Test that real-time signals can
be explicitly be ignored by listing them.
---
tests/env/env-signal-handler.sh | 59 +++++++++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
diff --git a/tests/env/env-signal-handler.sh b/tests/env/env-signal-handler.sh
index 77d556457..d77f47a5a 100755
--- a/tests/env/env-signal-handler.sh
+++ b/tests/env/env-signal-handler.sh
@@ -19,6 +19,7 @@
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ env seq test timeout printf
trap_sigpipe_or_skip_
+getlimits_
# /bin/sh has an intermittent failure in ignoring SIGPIPE on OpenIndiana 11
# so we require bash as discussed at:
@@ -128,6 +129,64 @@ EOF
timeout_sig=PIPE env_opt='--ignore-signal=PIPE' \
retry_delay_ env_ignore_delay_ .1 6 || fail=1
+# If the system's signal.h defines SIGRTMIN and SIGRTMAX, assume that real-time
+# signals are supported.
+if test $SIGRTMIN -gt 0 && test $SIGRTMAX -gt $SIGRTMIN; then
+ # Find the lowest supported signal number used for real-time signals.
+ for i in $(seq $SIGRTMIN $SIGRTMAX); do
+ if test $i -eq $SIGRTMIN; then
+ sig=RTMIN
+ else
+ sig=RTMIN+$(($i - $SIGRTMIN))
+ fi
+ if kill -l $sig; then
+ rtmin_signal=$sig
+ break
+ fi
+ done
+
+ # Find the largest supported signal number used for real-time signals.
+ for i in $(seq $SIGRTMAX -1 $SIGRTMIN); do
+ if test $i -eq $SIGRTMAX; then
+ sig=RTMAX
+ else
+ sig=RTMAX-$(($SIGRTMAX - $i))
+ fi
+ if kill -l $sig; then
+ rtmax_signal=$sig
+ break
+ fi
+ done
+
+ # Fail if we could not find a supported real-time signal using 'kill'.
+ test -n "$rtmin_signal" && test -n "$rtmax_signal" || framework_failure_
+
+ for sig in $rtmin_signal $rtmax_signal; do
+ # Baseline test - ignore signal handler
+ # -------------------------------------
+ # Terminate 'sleep' with $sig
+ # All real-time signals terminate the program by default.
+ cat <<EOF >exp || framework_failure_
+timeout: sending signal $sig to command 'env'
+EOF
+ timeout_sig=$sig env_opt='' \
+ retry_delay_ env_ignore_delay_ .1 6 || fail=1
+
+ # env test - ignore signal handler
+ # --------------------------------
+ # Use env to ignore real-time signals - "sleep" should continue running
+ # after timeout sends $sig, and be killed using SIGKILL.
+ cat <<EOF >exp || framework_failure_
+timeout: sending signal $sig to command 'env'
+timeout: sending signal KILL to command 'env'
+EOF
+ timeout_sig=$sig env_opt="--ignore-signal=$sig" \
+ retry_delay_ env_ignore_delay_ .1 6 || fail=1
+ timeout_sig=$sig env_opt='--ignore-signal' \
+ retry_delay_ env_ignore_delay_ .1 6 || fail=1
+ done
+fi
+
# env test --list-signal-handling
for sig in INT PIPE; do
env --default-signal --ignore-signal=$sig --list-signal-handling true \
--
2.52.0