On Wed, May 3, 2017 at 8:27 AM, Chet Ramey <chet.ra...@case.edu> wrote: > Both waits should return the same exit status. Using `builtin' should not > conceal that aspect of wait's behavior.
FWIW, I can reproduce this in the latest devel branch: dualbus@debian:~/src/gnu/bash$ ./bash -c 'trap : TERM; { sleep 1; kill $$; } & wait' here 143 dualbus@debian:~/src/gnu/bash$ ./bash -c 'trap : USR1; { sleep 1; kill -USR1 $$; } & builtin wait' here ^C dualbus@debian:~/src/gnu/bash$ ./bash -c 'trap : USR1; { sleep 1; kill -USR1 $$; } & wait $!' here 138 dualbus@debian:~/src/gnu/bash$ ./bash -c 'trap : USR1; { sleep 1; kill -USR1 $$; } & builtin wait $!' here `wait' vs `builtin wait' do not seem to be following the same code paths. BTW, the second case (builtin wait with no pid list to wait for causes an infinite loop here) The prints are due to: dualbus@debian:~/src/gnu/bash$ git diff -- builtins diff --git a/builtins/wait.def b/builtins/wait.def index 5deb3735..1999c8e7 100644 --- a/builtins/wait.def +++ b/builtins/wait.def @@ -67,6 +67,7 @@ $END #endif #include <chartypes.h> +#include <stdio.h> #include "../bashansi.h" @@ -132,6 +133,7 @@ wait_builtin (list) interrupt_immediately++; #endif + fprintf(stderr, "here\n"); /* POSIX.2 says: When the shell is waiting (by means of the wait utility) for asynchronous commands to complete, the reception of a signal for which a trap has been set shall cause the wait utility to return @@ -147,6 +149,7 @@ wait_builtin (list) { last_command_exit_signal = wait_signal_received; status = 128 + wait_signal_received; + fprintf(stderr, "%d\n", status); wait_sigint_cleanup (); WAIT_RETURN (status); }