Linux系统采用timeout和timelimit命令让程序运行指定时间?
发布时间:2023-10-18 10:04:57 所属栏目: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 命令来查看。 (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐