---
name: "timelimit"
section: "1"
platform: "linux"
package: "timelimit"
version: "1.9.2-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/timelimit"
---

# timelimit(1)

effectively limit the absolute execution time of a process

## NAME

**timelimit** – effectively limit the absolute execution time of a process

## SYNOPSIS

**timelimit** \[**-pq**\] \[**-S** *killsig*\] \[**-s** *warnsig*\] \[**-T** *killtime*\] \[**-t** *warntime*\] *command* \[*arguments* *...*\]

**timelimit** **--features**

## 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:

- **--features**

  List the compile-time features supported by this version of **timelimit**:

  - timelimit

    Always present, with the version of the **timelimit** tool.

  - subsecond

    Present if timeouts with subsecond precision are supported, with version 1.0.

- **-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)](/setitimer/2.md) 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)](/sh/1.md). 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)](/sysexits/3.md) 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:

```
timelimit -p /usr/local/bin/rsync rsync://some.host/dir /opt/mirror
```

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)](/kill/1.md), [rsync(1)](/rsync/1.md), [signal(3)](/signal/3.md), 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⟩.
