Linux timeout命令设置命令超时

timeout是一个命令行程序,用于在指定的时间内运行命令,如果超出指定时间,则终止该命令。

换句话说,timeout允许您在有时间限制的内运行命令。timeout命令是GNU核心程序的一部分。

timeout命令几乎安装在所有Linux发行版中。如果您想运行没有内置超时选项的命令,则非常方便。

在本教程中,我们将说明如何使用timeout命令,包括命令的语法和选项。

timeout命令

timeout命令的语法是timeout [OPTIONS] DURATION COMMAND [ARG]…

DURATION可以是正整数或浮点数,后跟时间单位秒sm分钟,h小时,d天,这是个可选的参数。

在不指定时间单位时,默认为秒。如果超时时间设置为零,则禁用超时。

COMMAND命令你要运行的命令,[ARG] 是要运行命令的参数,多个参数使用空格分隔。

如果要运行的命令需要以root用户运行,例如tcpdump命令,请在timeout命令之前加sudo

例如命令sudo timeout 300 tcpdump -n -w data.pcap 将会运行tcpdump命令300秒,也就是5分钟后停止tcpdump命令抓取数据包。

sudo timeout 300 tcpdump -n -w data.pcap

发送进程信号

如果未给出信号,则在达到时间限制时,timeoutSIGTERM信号发送到给运行的命令。您也可以使用-s/--signal选项指定要发送的信号参数。

例如命令sudo timeout -s SIGKILL ping 8.8.8.8,将在一分钟后将SIGKILL发送到ping命令。您也可以按名称指定信号,例如SIGKILL或编号9

以下两个命令是等价的,要获取所有可用信号的列表,请运行kill -l命令,这将会打印所有进程信号的列表。

sudo timeout -s SIGKILL ping 8.8.8.8
sudo timeout -s 9 ping 8.8.8.8
kill -l

终止进程

SIGTERM是timeout命令默认发送进程信号,某些进程可能会捕获或忽略该信号。在这些情况下,进程会在发送终止信号后继续运行。

要确保杀死忽略SIGTERM信号的命令,请使用-k/--kill-after选项,后跟超时的时间。在达到指定的时间后timeout将会强制终止进程。

例如命令sudo timeout -k 10 1m ping 8.8.8.8timeout命令设置超时是一分钟,如果在一分钟后ping命令没有终止,它将在十秒钟后将其强制终止。

sudo timeout -k 10 1m ping 8.8.8.8

保留退出状态

在达到timeout设置的超时,timeout命令的退出代码将返回124。 否则,它返回运行命令的退出状态。

即使在达到时间限制时也要返回timeout命令的退出状态,请使用--preserve-status选项。

timeout --preserve-status 5 ping 8.8.8.8

前台运行

默认情况下,timeout在后台运行托管命令。如果要在前台运行托管的命令,请使用--foreground选项。

当您要运行需要用户交互命令时,此选项很有用。

timeout --foreground 5m ./script.sh

在五秒后终止命令

timeout 5 ping 8.8.8.8

在五分钟后终止命令

timeout 5m ping 8.8.8.8

在一分钟零六秒后终止命令

timeout 1.1m ping 8.8.8.8

结论

timeout是一个命令行程序,用于在指定的时间内运行命令,如果超出指定时间,则终止该命令。

timeout是一个简单的命令没有太多选项。通常,您将仅需要设置两个参数,超时和要运行的命令。

如果您有任何问题或反馈,请随时发表评论。

上一篇 如何在 Ubuntu 22.04 LTS 上安装 Ionic 框架
下一篇 如何在 Debian 11 上安装 Hestia 控制面板
宇宙之一粟

宇宙之一粟

这个人很懒,什么都没有留下~

本月创作热力图