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