On Fri, 4 May 2012, Herbert Xu wrote:
Marc Glisse <marc.glisse@xxxxxxxx> wrote:
Hello,
I noticed a strange behavior of "wait" when I suspend and resume a script.
$ cat a.sh
#!/bin/dash
(sleep 7; echo blah) &
(sleep 7; echo bloh) &
wait ; echo coucou
$ ./a.sh
^Z
zsh: suspended ./a.sh
$ fg
[1] + continued ./a.sh
coucou
$ blah
bloh
As you can see, the instruction after "wait" was executed immediatly on
resume, without waiting for the jobs.
If I replace the ';' after "wait" by "&&" and do the same suspend+resume,
"coucou" is never printed.
I am using dash version 0.5.7-3 in debian testing.
That's normal as wait was interrupted by a signal. If you want
to wait even after an interruption, you should check the return
value of wait.
Hello, and thanks for you answer.
I find that quite surprising. I re-read the posix description of wait, and
my understanding is that the return value of wait should depend on what
happened to the waited process (exit code, signal), not to wait itself.
And other shells seem to agree.
Are you suggesting that wait should always be used in a loop? With what
check exactly?
--
Marc Glisse
--
To unsubscribe from this list: send the line "unsubscribe dash" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html