Linux中的超时命令

timeout 是一个命令行实用程序,它运行指定的命令,如果在给定的时间段后仍在运行,则终止该命令。 换一种说法, timeout 允许您在有时间限制的情况下运行命令。 的 timeout 该命令是GNU核心实用程序软件包的一部分,该软件包几乎安装在所有Linux发行版中。

当您要运行没有内置超时选项的命令时,它非常方便。

在本文中,我们将说明如何使用Linux timeout 命令。

如何使用 timeout 命令#

的语法 timeout 命令如下:

timeout [OPTIONS] DURATION COMMAND [ARG]…

DURATION 可以是正整数或浮点数,后跟可选的单位后缀:

  • s -秒(默认)
  • m – 分钟
  • h – 小时
  • d – 天

如果不使用任何单位,则默认为秒。 如果持续时间设置为零,则禁用关联的超时。

必须在参数之前提供命令选项。

以下是一些基本示例,展示了如何使用 timeout 命令:

  • 五秒钟后终止命令:

    timeout 5 ping 8.8.8.8
  • 五分钟后终止命令:

    timeout 5m ping 8.8.8.8
  • 一分钟六秒钟后终止命令:

    timeout 1.1m ping 8.8.8.8

如果要运行需要提升权限的命令,例如 tcpdump ,前置 sudo 之前 timeout

sudo timeout 300 tcpdump -n -w data.pcap

发送特定信号

如果没有信号 timeout 发送 SIGTERM 达到时间限制时,将信号发送给托管命令。 您可以使用来指定要发送的信号 -s--signal) 选项。

例如,发送 SIGKILLping 一分钟后,您将使用以下命令:

sudo timeout -s SIGKILL ping 8.8.8.8

信号可以通过其名称指定,例如 SIGKILL 或类似的数字 9。 以下命令与上一个命令相同:

sudo timeout -s 9 ping 8.8.8.8

要获取所有可用信号的列表,请使用 kill -l 命令:

kill -l

消除卡住的进程

SIGTERM,超过某些时间限制时发送的默认信号可能会被某些进程捕获或忽略。 在那种情况下,该过程在发送终止信号后继续运行。

要确保监视的命令被杀死,请使用 -k--kill-after)选项,然后加上一个时间段。 在达到给定的时间限制后使用此选项时, timeout 命令发送 SIGKILL 向托管程序发出无法捕获或忽略的信号。

在以下示例中, timeout 运行命令一分钟,如果没有终止,它将在十秒钟后将其杀死:

sudo timeout -k 10 1m ping 8.8.8.8

超时-k“ ./test.sh”

在达到指定的时间限制后被杀死

保留退出状态#

timeout 退货 124 当达到时间限制时。 否则,它将返回托管命令的退出状态。

要返回命令的退出状态(即使已达到时间限制),请使用 --preserve-status 选项:

timeout --preserve-status 5 ping 8.8.8.8

在前景中运行

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

timeout --foreground 5m ./script.sh

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

结论#

timeout 命令用于运行有时间限制的给定命令。

timeout 是一个简单的命令,没有很多选择。 通常,您将调用 timeout 仅带有两个参数,持续时间和托管命令。

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

超时终端

Sidebar