When running commands by hand it’s often easy to tell when something is taking too long to run, and then to cancel it with Ctrl+C or similar. But what if you need to run something and leave it unattended, for example a
It turns out the
timeout command can help with that, and it’s very simple to use:
timeout 30s a-very-slow-command
With the above example, the slow command will be terminated (sent a
SIGTERM signal) if it’s still running after 30 seconds. You can use other suffixes (such as
m for minutes,
h for hours and
d for days) and use floating point numbers (e.g.
1.25m is 75 seconds).
If you have to deal with a particularly difficult command and a
SIGTERM isn’t enough you can instruct timeout to send a
SIGKILL after an additional delay:
timeout -k 20s 1.5m badly-behaved-command
In this example,
badly-behaved-command will be told to terminate after 1.5 minutes, and 20 seconds after that it will be killed.
timeout is part of GNU coreutils and should be available out of the box on most Linux systems. Further command-line options are available; be sure to check the timeout(1) man page to get an idea of what it can do. If you need additional features an alternative called timelimit is available in most distributions, see timelimit(1) for what it does differently.