xref: /freebsd/bin/timeout/timeout.1 (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
1.\" SPDX-License-Identifier: BSD-2-Clause
2.\"
3.\" Copyright (c) 2014 Baptiste Daroussin <bapt@FreeBSD.org>
4.\" All rights reserved.
5.\"
6.\" Redistribution and use in source and binary forms, with or without
7.\" modification, are permitted provided that the following conditions
8.\" are met:
9.\" 1. Redistributions of source code must retain the above copyright
10.\"    notice, this list of conditions and the following disclaimer.
11.\" 2. Redistributions in binary form must reproduce the above copyright
12.\"    notice, this list of conditions and the following disclaimer in the
13.\"    documentation and/or other materials provided with the distribution.
14.\"
15.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25.\" SUCH DAMAGE.
26.\"
27.\" $FreeBSD$
28.\"
29.Dd June 26, 2023
30.Dt TIMEOUT 1
31.Os
32.Sh NAME
33.Nm timeout
34.Nd run a command with a time limit
35.Sh SYNOPSIS
36.Nm
37.Op Fl -signal Ar sig | Fl s Ar sig
38.Op Fl -preserve-status
39.Op Fl -kill-after Ar time | Fl k Ar time
40.Op Fl -foreground
41.Ar duration
42.Ar command
43.Op Ar args ...
44.Sh DESCRIPTION
45.Nm
46starts the
47.Ar command
48with its
49.Ar args .
50If the
51.Ar command
52is still running after
53.Ar duration ,
54it is killed.
55By default,
56.Dv SIGTERM
57is sent.
58The special
59.Ar duration ,
60zero, signifies no limit.
61Therefore a signal is never sent if
62.Ar duration
63is 0.
64.Pp
65The options are as follows:
66.Bl -tag -width indent
67.It Fl -preserve-status
68Exit with the same status as
69.Ar command ,
70even if it times out and is killed.
71.It Fl -foreground
72Do not propagate timeout to the children of
73.Ar command .
74.It Fl s Ar sig , Fl -signal Ar sig
75Specify the signal to send on timeout.
76By default,
77.Dv SIGTERM
78is sent.
79.It Fl k Ar time , Fl -kill-after Ar time
80Send a
81.Dv SIGKILL
82signal if
83.Ar command
84is still running after
85.Ar time
86after the first signal was sent.
87.El
88.Sh DURATION FORMAT
89.Ar duration
90and
91.Ar time
92are non-negative integer or real (decimal) numbers, with an optional
93unit-specifying suffix.
94Values without an explicit unit are interpreted as seconds.
95.Pp
96Supported unit symbols are:
97.Bl -tag -width indent -compact
98.It Cm s
99seconds
100.It Cm m
101minutes
102.It Cm h
103hours
104.It Cm d
105days
106.El
107.Sh EXIT STATUS
108If the timeout was not reached, the exit status of
109.Ar command
110is returned.
111.Pp
112If the timeout was reached and
113.Fl -preserve-status
114is set, the exit status of
115.Ar command
116is returned.
117If
118.Fl -preserve-status
119is not set, an exit status of 124 is returned.
120.Pp
121If
122.Ar command
123exits after receiving a signal, the exit status returned is the signal number
124plus 128.
125.Pp
126If
127.Ar command
128refers to a non-existing program, the exit status returned is 127.
129.Pp
130If
131.Ar command
132is an otherwise invalid program, the exit status returned is 126.
133.Pp
134If an invalid parameter is passed to
135.Fl s
136or
137.Fl k ,
138the exit status returned is 125.
139.Sh EXAMPLES
140Run
141.Xr sleep 1
142with a time limit of 4 seconds.
143Since the command completes in 2 seconds, the exit status is 0:
144.Bd -literal -offset indent
145$ timeout 4 sleep 2
146$ echo $?
1470
148.Ed
149.Pp
150Run
151.Xr sleep 1
152for 4 seconds and terminate process after 2 seconds.
153124 is returned since no
154.Fl -preserve-status
155is used:
156.Bd -literal -offset indent
157$ timeout 2 sleep 4
158$ echo $?
159124
160.Ed
161.Pp
162Same as above but preserving status.
163Exit status is 128 + signal number (15 for
164.Va SIGTERM ) :
165.Bd -literal -offset indent
166$ timeout --preserve-status 2 sleep 4
167$ echo $?
168143
169.Ed
170.Pp
171Same as above but sending
172.Va SIGALRM
173(signal number 14) instead of
174.Va SIGTERM :
175.Bd -literal -offset indent
176$ timeout --preserve-status -s SIGALRM 2 sleep 4
177$ echo $?
178142
179.Ed
180.Pp
181Try to
182.Xr fetch 1
183the PDF version of the
184.Fx
185Handbook.
186Send a
187.Va SIGTERM
188signal after 1 minute and send a
189.Va SIGKILL
190signal 5 seconds later if the process refuses to stop:
191.Bd -literal -offset indent
192$ timeout -k 5s 1m fetch \\
193> https://download.freebsd.org/ftp/doc/en/books/handbook/book.pdf
194.Ed
195.Sh SEE ALSO
196.Xr kill 1 ,
197.Xr nohup 1 ,
198.Xr signal 3 ,
199.Xr daemon 8
200.Sh HISTORY
201The
202.Nm
203command first appeared in
204.Fx 10.3 .
205.Sh AUTHORS
206.An Baptiste Daroussin Aq Mt bapt@FreeBSD.org
207and
208.An Vsevolod Stakhov Aq Mt vsevolod@FreeBSD.org
209