良许Linux教程网 Linux命令大全 Linux系统使用timeout和timelimit命令让程序运行指定时间?

Linux系统使用timeout和timelimit命令让程序运行指定时间?

对于 Linux 工程师,我们每天面对的最多的就是黑乎乎的终端,以及在终端里敲入的各种命令。在使用 Linux 系统的过程中,我们有时候会碰到下面这几种场合:

  1. 一个命令/程序在运行过程中需要花费很长时间,而在这期间系统可能处于假死状态,我们点击什么都没反应,只好等待或重启系统;
  2. 我们只是想让命令/程序运行一段特定时间,比如 3 秒,时间点一到就希望命令/程序停止运行;
  3. 命令/程序的 log 输出太快,但我们只需要一段时间的 log ,比如 10 秒。

为了满足这几种需求,本文介绍两种方法。我们有两种方法来实现这样的需求。

方法1:使用 timeout 命令

timeout 命令简直就是为这些需求而生!它可以将命令/程序的运行时间限定在你所指定的时间里。当时间到达之后,它会自动向所运行的命令/程序发送一个信号,中止这个命令/程序的运行。

timeout 命令已经存在 GNU 的软件库中,所以我们无需安装,可以直接使用。

该命令的一般使用方法是这样的:

$ timeout  command>

例如,按下面这种方式执行命令,程序将在 10 秒后自动中止运行。

$ timeout 10s tail -f /var/log/pacman.log

以上这条命令,参数 10s 表示指定程序运行的时间,其中 s 是单词 second 的缩写,代表秒,也可以省略不写(默认为秒)。除了秒这个单位,还有分钟、小时等。

  • m – 分钟
  • h – 小时
  • d – 天

如果不加以限制的话,直接执行 tail -f /var/log/pacman.log 的话,它会一直打印信息,直到你按 ctrl+c 为止。

前文提到,timeout 命令在命令/程序运行到指定时间之后,将会发送一个信号给该命令/程序。默认情况下这个命令是 SIGKILL ,当然你也可以指定它发送其它信号,这个时候你就需要使用它的 -k 选项了。

$ timeout -k 20 10 tail -f /var/log/pacman.log

上面的命令执行完之后,到达指定时间它将会发送代号为 20 的信号给 tail 命令,使其中止运行。代号 20 的信号是 SIGSTP 信号,所有支持的信号可使用以下命令查询:

kill -l

在对内核进行调试的时候,内核将一直输出 log ,所以这时候 timeout 命令就非常有用。例如我们只想查看内核 10 秒内所发送的信息,可以使用下面这条命令:

$ timeout 10 dmesg -w

当然 timeout 命令还有很多其它功能,有兴趣的小伙伴可以使用 man timeout 命令来获取更多信息。

方法2:使用 timelimit 命令

timelimit 命令的功能与 timeout 命令相似,但它提供了更多选项供我们使用。和 timeout 命令一样你可以指定发送的信号,为了防止信号的丢失,你还可以指定信号发送次数。因此,timelimit 命令更加灵活,同时也更加可靠。

不仅如此,在发送我们所指定的信号之前,它还可以发送警告信号。

但是,GNU Linux 系统没有预先安装timelimit 命令,所以不能直接使用。对于 Debian 发行版,你可以使用 apt-get 命令进行安装:

$ sudo apt-get install timelimit

其它操作系统可以使用所对应的安装方式,或者使用源码安装。

命令安装完之后,我们就可以正常使用 timelimit 命令了。前文所举的例子,如果使用 timelimit 命令来实现的话,可以这样写:

$ timelimit -t10 tail -f /var/log/pacman.log

在不带任何参数的情况下,timelimit 命令的默认选项参数如下:

warntime=3600 secondswarnsig=15killtime=120killsig=9

如果想要了解更多 timelimit 命令的用法,可以使用 man timelimit 命令来查看。

本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
头像

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部