bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: wait -n misses signaled subprocess


From: Chet Ramey
Subject: Re: wait -n misses signaled subprocess
Date: Mon, 29 Jan 2024 12:07:53 -0500
User-agent: Mozilla Thunderbird

On 1/29/24 7:12 AM, Robert Elz wrote:
     Date:        Sun, 28 Jan 2024 18:21:42 -0500
     From:        Chet Ramey <chet.ramey@case.edu>
     Message-ID:  <3347f790-529b-4bee-91fd-de39bed3f49e@case.edu>

   | because `wait -n' doesn't look in the table
   | of saved statuses -- its job is to wait for `new' jobs to terminate, not
   | ones that have already been removed from the table.

That's very interesting, and most unexpected information.

I always wondered why the option was 'n' - I would have made it
be 'a' probably, as a shorthand for "any" - but then I decided
that perhaps 'n' was a better choice, as "a" could also be "all",
the option name would not be providing any real clue at all, so
I assumed you'd been ultra clever and used 'n' as the next char
in "any" and also as it can be read like the first part of "en" "ee"
(which you need to say out loud, or at least in your head, to get the
effect of).

You should have. You told me about your implementation using `-n' in
10/2017, long before I implemented it (4/2020).

It never even dawned on me that 'n' might mean "new", as in only
processes that hadn't terminated at the time the wait -n was done,
as that's essentially a recipe for script madness, race conditions
galore, as the one reported here.

What does `wait -n' without job arguments mean?

What wait(1) needed was an alternative to its normal "all" semantic,
just "wait" waits for every background job to terminate, what's needed
is a way to wait for any one of them (whether already terminated, but
not previously waited for or not).   That's what I always assumed
wait -n was doing, and how I implemented it in the NetBSD shell.

OK. Since wait without options can already wait for the same pid multiple
times, the -n option has to bring some new functionality here.



Similarly "wait pid1 pid2 pid3" waits for all 3 of those to
terminate, so "wait -n pid1 pid2 pid3" should wait for any one
of them - already terminated or not.

As long as it's still in the jobs list.


 When there's just one pid
in the list, the -n option always seemed useless to me, there
ought be no difference between "wait pid" and "wait -n pid"
(as in wait for all of one, and wait for any of one, mean the
same thing, wait for that one), but obviously should still be
supported for consistency.

OK. We can agree there shouldn't be any difference between `wait pid'
and `wait -n pid'.

--
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    chet@case.edu    http://tiswww.cwru.edu/~chet/

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]