execline
Software
skarnet.org

# The `wait` program

`wait` waits for a set of children, then executes a program.

## Interface

In an execlineb script:

         wait [ -I | -i ] [ -a | -o ] [ -r | -t timeout ] { [ pids... ] } prog...

- `wait` reads a list of pids in a (possibly empty) block, and unquotes it.
- `wait` waits for every child whose pid is listed in pids.... If pids... is an empty list, it waits for every child process it has.
- `wait` then execs into prog....

## Options

- `-r` : equivalent to `-t 0`. Do not pause: only reap processes that are already dead when `wait` is invoked.
- `-t` timeout : wait for a maximum of timeout milliseconds. If there still are living processes among pids... (or among `wait`'s children if pids... is an empty list), after timeout milliseconds, they will not be reaped.
- `-I` : loose. If `wait` times out while waiting for children to die, it will still exec into prog.... This is the default.
- `-i` : strict. If `wait` times out, it will print an error message and exit 99.
- `-o` : wait for one of the listed pids — exec into prog as soon as one of the listed children dies. (If no pid is listed, wait for one child to die.) The `!` environment variable will be set to the pid that died, and the `?` environment variable will contain an approximation of its exit code. If no listed child has died before `wait` has to exec (either because it timed out or it has no suitable children left), the `?` and `!` environment variables are unset.
- `-a` : wait for all of the listed pids. Do not touch the `!` or `?` variables. This is the default.

## Notes

- For POSIX compatibility, `wait` also works when it cannot find a block. In that case, all the options are still supported and have the same effect, but the rest of the command line is interpreted as pids... arguments and `wait` does not execute into a program; instead, it exits with a conforming exit code.