NAME¶
timelimit —
effectively limit the
absolute execution time of a process
SYNOPSIS¶
timelimit |
[-pq]
[-S
killsig]
[-s
warnsig]
[-T
killtime]
[-t
warntime] command
[arguments ...] |
DESCRIPTION¶
The
timelimit utility executes a given
command with the supplied
arguments and terminates the spawned process after a
given time with a given signal. If the process exits before the time limit has
elapsed,
timelimit will silently exit, too.
Options:
- -p
- If the child process is terminated by a signal,
timelimit propagates this condition, i.e. sends the same
signal to itself. This allows the program executing
timelimit to determine whether the child process was
terminated by a signal or actually exited with an exit code larger than
128.
- -q
- Quiet operation - timelimit does not
output diagnostic messages about signals sent to the child process.
- -S
killsig
- Specify the number of the signal to be sent to the process
killtime seconds after
warntime has expired. Defaults to 9 (SIGKILL).
- -s
warnsig
- Specify the number of the signal to be sent to the process
warntime seconds after it has been started. Defaults
to 15 (SIGTERM).
- -T
killtime
- Specify the maximum execution time of the process before
sending killsig after warnsig
has been sent. Defaults to 120 seconds.
- -t
warntime
- Specify the maximum execution time of the process in
seconds before sending warnsig. Defaults to 3600
seconds.
On systems that support the
setitimer(2) system call, the
warntime and
killtime values may
be specified in fractional seconds with microsecond precision.
ENVIRONMENT¶
KILLSIG
- The killsig to use if the
-S option was not specified.
KILLTIME
- The killtime to use if the
-T option was not specified.
WARNSIG
- The warnsig to use if the
-s option was not specified.
WARNTIME
- The warntime to use if the
-t option was not specified.
EXIT STATUS¶
If the child process exits normally, the
timelimit utility
will pass its exit code on up. If the child process is terminated by a signal
and the
-p flag was not specified, the
timelimit utility's exit status is 128 plus the signal
number, similar to
sh(1). If the
-p flag
was specified, the
timelimit utility will raise the signal
itself so that its own parent process may in turn reliably distinguish between
a signal and a larger than 128 exit code.
In rare cases, the
timelimit utility may encounter a system or
user error; then, its exit status is one of the standard
sysexits(3) values:
EX_USAGE
- The command-line parameters and options were incorrectly
specified.
EX_SOFTWARE
- The timelimit utility itself received an
unexpected signal while waiting for the child process to terminate.
EX_OSERR
- The timelimit utility was unable to
execute the child process, wait for it to terminate, or examine its exit
status.
EXAMPLES¶
The following examples are shown as given to the shell:
Run the rsync program to mirror a WWW or FTP site and kill it if it runs longer
than 1 hour (that is 3600 seconds) with SIGTERM. If the rsync process does not
exit after receiving the SIGTERM,
timelimit issues a SIGKILL
120 seconds after the SIGTERM. If the rsync process is terminated by a signal,
timelimit will itself raise this signal.
tcpserver 0 8888 timelimit -t600 -T300
/opt/services/chat/stats
Start a
tcpserver(n) process listening on tcp port 8888; each
client connection shall invoke an instance of an IRC statistics tool under
/opt/services/chat and kill it after 600 seconds have
elapsed. If the stats process is still running after the SIGTERM, it will be
killed by a SIGKILL sent 300 seconds later.
env WARNTIME=4.99 WARNSIG=1 KILLTIME=1.000001
timelimit sh stats.sh
Start a shell script and kill it with a SIGHUP in a little under 5 seconds. If
the shell gets stuck and does not respond to the SIGHUP, kill it with the
default SIGKILL just a bit over a second afterwards.
SEE ALSO¶
kill(1),
rsync(1),
signal(3),
tcpserver(n)
STANDARDS¶
No standards documentation was harmed in the process of creating
timelimit.
BUGS¶
Please report any bugs in
timelimit to the author.
AUTHOR¶
The
timelimit utility was conceived and written by
Peter Pentchev ⟨roam@ringlet.net⟩ with
contributions and suggestions by
Karsten W Rohrbach
⟨karsten@rohrbach.de⟩,
Teddy Hogeborn
⟨teddy@fukt.bsnet.se⟩, and
Tomasz Nowak
⟨nowak2000@poczta.onet.pl⟩.