hush: output bash-compat killing signal names

This significantly syncronises ash-signals and hush-signals tests.

function                                             old     new   delta
process_wait_result                                  449     450      +1

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2020-10-24 04:26:43 +02:00
parent b65d6cb00f
commit e16f7eb596
9 changed files with 92 additions and 7 deletions

View File

@ -0,0 +1,14 @@
___
___
___
trap -- 'a' EXIT
trap -- 'a' INT
trap -- 'a' USR1
trap -- 'a' USR2
___
___
trap -- 'a' USR1
trap -- 'a' USR2
___
___
trap -- 'a' USR2

View File

@ -0,0 +1,23 @@
# no output -- default state
echo ___
trap
# assign some traps
echo ___
trap "a" EXIT INT USR1 USR2
# show them all
echo ___
trap
# clear one
echo ___
trap 0 INT
echo ___
trap
# clear another
echo ___
trap "-" USR1
echo ___
trap

View File

@ -8704,8 +8704,8 @@ static int process_wait_result(struct pipe *fg_pipe, pid_t childpid, int status)
*/ */
&& i == fg_pipe->num_cmds-1 && i == fg_pipe->num_cmds-1
) { ) {
/* TODO: use strsignal() instead for bash compat? but that's bloat... */ /* strsignal() is for bash compat. ~600 bloat versus bbox's get_signame() */
puts(sig == SIGINT || sig == SIGPIPE ? "" : get_signame(sig)); puts(sig == SIGINT || sig == SIGPIPE ? "" : strsignal(sig));
} }
/* TODO: if (WCOREDUMP(status)) + " (core dumped)"; */ /* TODO: if (WCOREDUMP(status)) + " (core dumped)"; */
/* TODO: MIPS has 128 sigs (1..128), what if sig==128 here? /* TODO: MIPS has 128 sigs (1..128), what if sig==128 here?

View File

@ -1,5 +1,5 @@
KILL Killed
137:137 137:137
KILL Killed
0:0 0:0
Done Done

View File

@ -2,4 +2,4 @@ sending USR2
caught caught
sending USR2 sending USR2
sending USR2 sending USR2
USR2 User defined signal 2

View File

@ -0,0 +1,20 @@
got signal
trap -- 'echo got signal' USR1
sent 1 signal
got signal
wait interrupted
trap -- 'echo got signal' USR1
sent 2 signal
got signal
wait interrupted
trap -- 'echo got signal' USR1
sent 3 signal
got signal
wait interrupted
trap -- 'echo got signal' USR1
sent 4 signal
got signal
wait interrupted
trap -- 'echo got signal' USR1
sent 5 signal
sleep completed

View File

@ -0,0 +1,28 @@
trap "echo got signal" USR1
for try in 1 2 3 4 5; do
kill -USR1 $$
sleep 0.2
echo "sent $try signal"
done &
# Ensure "wait" has something to wait for
sleep 2 &
# Ensure we do not execute "trap" below before "kill -USR1" above
# (was getting failure on loaded machine without this)
sleep 0.1
sleeping=true
while $sleeping; do
trap
if wait %%; then
echo "sleep completed"
sleeping=false
elif [ $? = 127 ]; then
echo "BUG: no processes to wait for?!"
sleeping=false
else
echo "wait interrupted"
fi
done

View File

@ -1,2 +1,2 @@
HUP Hangup
Done:129 Done:129

View File

@ -17,5 +17,5 @@ Ok
trap -- '' HUP trap -- '' HUP
trap -- '' QUIT trap -- '' QUIT
trap -- '' SYS trap -- '' SYS
TERM Terminated
Done Done