1.\" 2.\" Copyright (c) 2004-2009, Jilles Tjoelker 3.\" All rights reserved. 4.\" 5.\" Redistribution and use in source and binary forms, with 6.\" or without modification, are permitted provided that the 7.\" following conditions are met: 8.\" 9.\" 1. Redistributions of source code must retain the above 10.\" copyright notice, this list of conditions and the 11.\" following disclaimer. 12.\" 2. Redistributions in binary form must reproduce the 13.\" above copyright notice, this list of conditions and 14.\" the following disclaimer in the documentation and/or 15.\" other materials provided with the distribution. 16.\" 17.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 18.\" CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED 19.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 21.\" PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 22.\" COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY 23.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25.\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 26.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27.\" CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 29.\" NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 30.\" USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 31.\" OF SUCH DAMAGE. 32.\" 33.Dd January 21, 2021 34.Dt PWAIT 1 35.Os 36.Sh NAME 37.Nm pwait 38.Nd wait for processes to terminate 39.Sh SYNOPSIS 40.Nm 41.Op Fl t Ar duration 42.Op Fl ov 43.Ar pid 44\&... 45.Sh DESCRIPTION 46The 47.Nm 48utility will wait until each of the given processes has terminated. 49.Pp 50The following option is available: 51.Bl -tag -width indent 52.It Fl o 53Exit when any of the given processes has terminated. 54.It Fl t Ar duration 55If any process is still running after 56.Ar duration , 57.Nm 58will exit. 59The 60.Ar duration 61value can be integer or decimal numbers. 62Values without unit symbols are interpreted as seconds. 63.Pp 64Supported unit symbols are: 65.Bl -tag -width indent -compact 66.It s 67seconds 68.It m 69minutes 70.It h 71hours 72.El 73.It Fl v 74Print the exit status when each process terminates or 75.Ql timeout 76if the timer goes off earlier. 77.El 78.Sh EXIT STATUS 79The 80.Nm 81utility exits 0 on success, and >0 if an error occurs. 82.Pp 83If the 84.Fl t 85flag is specified and a timeout occurs, the exit status will be 124. 86.Pp 87Invalid pids elicit a warning message but are otherwise ignored. 88.Sh EXAMPLES 89Start two 90.Xr sleep 1 91processes in the background. 92The first one will sleep for 30 seconds and the second one for one hour. 93Wait for any of them to finish but no more than 5 seconds. 94Since a timeout occurs the exit status is 124: 95.Bd -literal -offset indent 96$ sleep 30 & sleep 3600 & 97[1] 1646 98[2] 1647 99$ pwait -o -t5 1646 1647 100$? 101124 102.Ed 103.Pp 104Same as above but try to obtain the exit status of the processes. 105In this case 106.Ql timeout 107is shown and the exit status is 124: 108.Bd -literal -offset indent 109$ sleep 30 & sleep 3600 & 110[1] 1652 111[2] 1653 112$ pwait -v -t 5 1652 1653 113timeout 114$? 115124 116.Ed 117.Pp 118Start two 119.Xr sleep 1 120processes in the background sleeping for 30 and 40 seconds respectively. 121Wait 60 seconds for any of them to finish and get their exit codes: 122.Bd -literal -offset indent 123$ sleep 30 & sleep 40 & 124[1] 1674 125[2] 1675 126$ pwait -v -t 60 1674 1675 1271674: exited with status 0. 1281675: exited with status 0. 129[1]- Done sleep 30 130[2]+ Done sleep 40 131$ echo $? 1320 133.Ed 134.Sh SEE ALSO 135.Xr kill 1 , 136.Xr pkill 1 , 137.Xr ps 1 , 138.Xr wait 1 , 139.Xr kqueue 2 140.Sh NOTES 141.Nm 142is not a substitute for the 143.Xr wait 1 144builtin 145as it will not clean up any zombies or state in the parent process. 146.Pp 147To avoid deadlock, 148.Nm 149will ignore its own pid, if it is provided as a process id to wait for. 150.Sh HISTORY 151A 152.Nm 153command first appeared in SunOS 5.8. 154