加入收藏 | 设为首页 | 会员中心 | 我要投稿 烟台站长网 (https://www.0535zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

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

发布时间:2023-10-18 10:04:56 所属栏目:Linux 来源:互联网
导读:   对于 Linux 工程师,我们每天面对的最多的就是黑乎乎的终端,以及在终端里敲入的各种命令。在使用 Linux 系统的过程中,我们有时候会碰到下面这几种场合:



  一个命令/程序在运
  对于 Linux 工程师,我们每天面对的最多的就是黑乎乎的终端,以及在终端里敲入的各种命令。在使用 Linux 系统的过程中,我们有时候会碰到下面这几种场合:
 
  一个命令/程序在运行过程中需要花费很长时间,而在这期间系统可能处于假死状态,我们点击什么都没反应,只好等待或重启系统;
 
  我们只是想让命令/程序运行一段特定时间,比如 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 seconds、 warnsig=15、 killtime=120、killsig=9
 
  如果想要了解更多 timelimit 命令的用法,可以使用 man timelimit 命令来查看。
 

(编辑:烟台站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章