Commands

Linux 系统中的 Timeout 命令

luobo · 1月26日 · 2020年 · ·

Linux系统中Timeout是一个命令行工具,它运行指定的命令,如果在给定的时间段后仍在运行,则终止该命令。 换句话说,Timeout命令使您可以运行具有时间限制的命令。 timeout命令是GNU核心实用程序软件包的一部分,该软件包几乎安装在所有Linux发行版中。

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

在本文中,我们将解释如何使用Linux超时命令。

如何使用超时命令

Timeout 命令的语法如下:

[email protected]:~# timeout [OPTIONS] DURATION COMMAND [ARG]…

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

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

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

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

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

五秒钟后终止命令:

[email protected]:~# timeout 5 ping 8.8.8.8

五分钟后终止命令:

[email protected]:~# timeout 5m ping 8.8.8.8

一分钟六秒钟后终止命令:

[email protected]:~# timeout 1.1m ping 8.8.8.8

如果要运行需要提升权限的命令(例如tcpdump),请在超时前添加sudo:

[email protected]:~# sudo timeout 300 tcpdump -n -w data.pcap

发送特定信号

如果未给出信号,则在达到时间限制时,超时会将SIGTERM信号发送到托管命令。 您可以使用-s(--signal)选项指定要发送的信号。

例如,要在一分钟后将SIGKILL发送给ping命令,您可以使用:

[email protected]:~# sudo timeout -s SIGKILL ping 8.8.8.8

可以通过信号名称(例如SIGKILL)或数字(例如9)来指定信号。以下命令与上一个命令相同:

[email protected]:~# sudo timeout -s 9 ping 8.8.8.8

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

[email protected]:~# kill -l

结束停止的进程

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

要确保杀死受监视的命令,请在一段时间后使用-k(–kill-after)选项。 在达到给定的时间限制后使用此选项时,超时命令会将SIGKILL信号发送到无法捕获或忽略的托管程序。

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

[email protected]:~# sudo timeout -k 10 1m ping 8.8.8.8

timeout -k “./test.sh”

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

保留退出状态

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

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

[email protected]:~# timeout --preserve-status 5 ping 8.8.8.8

在前景中运行

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

[email protected]:~# timeout --foreground 5m ./script.sh

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

文章结语

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

timeout是一个简单的命令,没有太多选择。 通常,您仅使用两个参数(持续时间和托管命令)来调用超时。

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

0 条回应