timeout
是一个命令行实用程序,它运行指定的命令,并在给定时间段后终止该命令(如果该命令仍在运行)。换句话说,timeout
允许您运行有时间限制的命令。这timeout
命令是 GNU 核心实用程序包的一部分,几乎所有 Linux 发行版上都安装了该包。
当您想要运行没有内置超时选项的命令时,它会很方便。
在这篇文章中,我们将解释如何使用Linuxtimeout
命令。
如何使用timeout
命令#
语法为timeout
命令如下:
timeout [OPTIONS] DURATION COMMAND [ARG]…
The DURATION
可以是正整数或浮点数,后跟可选的单位后缀:
-
s
- 秒(默认)
-
m
- 分钟
-
h
- hours
-
d
- days
当不使用单位时,默认为秒。如果持续时间设置为零,则禁用关联的超时。
命令选项必须在参数之前提供。
以下是一些基本示例,演示如何使用timeout
命令:
如果您想运行需要提升权限的命令,例如tcpdump, 前置sudo
before timeout
:
sudo timeout 300 tcpdump -n -w data.pcap
发送特定信号#
如果没有发出信号,timeout
发送SIGTERM
当达到时间限制时向托管命令发出信号。您可以使用以下命令指定要发送的信号-s
(--signal
) 选项。
例如,发送SIGKILL
to the ping一分钟后命令,您将使用:
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
option:
timeout --preserve-status 5 ping 8.8.8.8
在前台运行#
默认情况下,timeout
在后台运行托管命令。如果您想在前台运行该命令,请使用--foreground
option:
timeout --foreground 5m ./script.sh
当您想要运行需要用户输入的交互式命令时,此选项非常有用。
结论#
The timeout
命令用于在有时间限制的情况下运行给定命令。
timeout
是一个简单的命令,没有很多选项。通常您会调用timeout
仅具有两个参数:持续时间和托管命令。
如果您有任何问题或反馈,请随时发表评论。