xref: /freebsd/bin/pwait/pwait.1 (revision 1a7c9e1585dd3ae14b03226e359d434c10066bfb)
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$ echo $?
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$ echo $?
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