有时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程序,以获得此功能,以便在特定时间后终止命令。它将通过警告信号,然后在超时后发送终止信号。您也可以传递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