wait [ job ... ]
       Wait  for  the  specified jobs or processes.  If job is not given
       then all currently active child processes are waited  for.   Each
       job  can be either a job specification or the process ID of a job
       in the job table.  The exit status from this command is  that  of
       the  job waited for.  If job represents an unknown job or process
       ID, a warning is printed (unless  the  POSIX_BUILTINS  option  is
       set) and the exit status is 127.

       It is possible to wait for recent processes (specified by process
       ID,  not  by job) that were running in the background even if the
       process has exited.  Typically the process ID will be recorded by
       capturing the value of the  variable  $!  immediately  after  the
       process  has  been  started.   There  is a limit on the number of
       process IDs remembered by the shell; this is given by  the  value
       of the system configuration parameter CHILD_MAX.  When this limit
       is  reached,  older  process  IDs  are  discarded, least recently
       started processes first.

       Note there is no protection against the process ID wrapping, i.e.
       if the wait is not executed soon enough there  is  a  chance  the
       process  waited  for  is  the wrong one.  A conflict implies both
       process IDs have been generated by the shell, as other  processes
       are  not recorded, and that the user is potentially interested in
       both, so this problem is intrinsic to process IDs.
