如何在Linux中运行具有时间限制(超时)的命令

有时Unix命令可能会运行很长时间而没有给出最终输出,或者进行不时给出部分输出的处理。在这种情况下,我们希望设置一个时间范围,在该时间范围内,完成该过程的命令杆将中止。这可以通过使用以下选项来实现。

使用超时工具

如果命令行不能在给定的时间内完成,超时工具将强制执行中止命令。下面是语法和示例。

语法

timeout DURATION COMMAND [ARG]...

其中Duration是希望命令运行的秒数
如果执行未完成,则在中止之前。在我们掌握的时间里,
s - seconds
m - minutes
h - hours
d - days

示例

在下面的示例中,我们使用ping命令对我们的网站执行ping操作,并且该过程仅持续5秒钟,此命令将自动停止运行。

$ timeout 5s ping (niaoge.com)

运行上面的代码给我们以下结果-

PING (niaoge.com) (94.130.82.52) 56(84) bytes of data.
64 bytes from (niaoge.com) (94.130.82.52): icmp_seq=1 ttl=128 time=126 ms
64 bytes from (niaoge.com) (94.130.82.52): icmp_seq=2 ttl=128 time=126 ms
64 bytes from (niaoge.com) (94.130.82.52): icmp_seq=3 ttl=128 time=126 ms
64 bytes from (niaoge.com) (94.130.82.52): icmp_seq=4 ttl=128 time=126 ms
64 bytes from (niaoge.com) (94.130.82.52): icmp_seq=5 ttl=128 time=127 ms

使用timelimit

需要安装timelimit程序,以获得此功能,以便在特定时间后终止命令。它将通过警告信号,然后在超时后发送终止信号。您也可以传递argumnets之类的参数,例如killtime,warntime等。因此,此命令为我们提供了更好的控件来警告和杀死命令。

首先,我们使用以下命令安装程序。

sudo apt-get install timelimit

接下来,我们看下面的例子来使用时间限制。这里-t指定发送warnsig之前进程的最大执行时间(以秒为单位),而T是发送warnsig之后发送killsig之前进程的最大执行时间。

timelimit -t6 -T12 ping (niaoge.com)

运行上面的代码给我们以下结果-

PING (niaoge.com) (94.130.82.52) 56(84) bytes of data.
64 bytes from (niaoge.com) (94.130.82.52): icmp_seq=1 ttl=128 time=127 ms
64 bytes from (niaoge.com) (94.130.82.52): icmp_seq=2 ttl=128 time=126 ms
64 bytes from (niaoge.com) (94.130.82.52): icmp_seq=3 ttl=128 time=126 ms
64 bytes from (niaoge.com) (94.130.82.52): icmp_seq=4 ttl=128 time=127 ms
64 bytes from (niaoge.com) (94.130.82.52): icmp_seq=5 ttl=128 time=128 ms
64 bytes from (niaoge.com) (94.130.82.52): icmp_seq=6 ttl=128 time=126 ms
timelimit: sending warning signal 15