0%

278_Linux中的超时命令Timeout

278_Linux中的超时命令Timeout

timeout是一个命令行工具,它运行一个指定的命令,如果在给定的时间后仍在运行,则终止该命令。换句话说,超时允许你运行一个有时间限制的命令。timeout命令是GNU核心实用程序包的一部分,几乎所有的Linux发行版都会安装该程序。

当你想运行一个没有内置超时选项的命令时,它就很方便。
在这篇文章中,我们将解释如何使用Linux超时命令。

QQ群:397745473

1
原贴: https://linuxize.com/post/timeout-command-in-linux/

如何使用timeout命令

1
2
3
timeout [OPTIONS] DURATION COMMAND [ARG]…
DURATION可以是一个正整数或一个浮点数,后面是一个可选的单位后缀。
当没有使用单位时,它默认为秒。如果持续时间被设置为零,相关的超时将被禁用。
  • s - seconds (default)
  • m - minutes
  • h - hours
  • d - days

示例

下面是几个基本的例子,演示了如何使用timeout命令。

在五秒钟后终止一个命令。

1
timeout 5 ping 8.8.8.8

五分钟后终止一个命令。

1
timeout 5m ping 8.8.8.8

在1分6秒后终止命令。

1
timeout 1.1m ping 8.8.8.8

如果你想运行一个需要高权限的命令,如tcpdump,在超时前加上sudo。

1
sudo timeout 300 tcpdump -n -w data.pcap

发出特定信号

如果没有给出信号,timeout在达到时间限制时向被管理的命令发送SIGTERM信号。你可以使用-s(-信号)选项指定发送哪个信号。

例如,要在一分钟后向ping命令发送SIGKILL信号,你可以使用

1
sudo timeout -s SIGKILL ping 8.8.8.8

你可以指定信号的名称,如SIGKILL,或其数字,如9。 下面的命令与前面的命令相同。

1
sudo timeout -s 9 ping 8.8.8.8

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

1
kill -l

杀死卡住的过程

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

为了确保被监视的命令被杀死,可以使用-k(-kill-after)选项,后面加一个时间段。当这个选项在达到给定的时间限制后使用时,超时空命令会向不能被捕捉或忽略的被管理程序发送SIGKILL信号。

在下面的例子中,timeout命令运行了一分钟,如果它没有被终止,它将在十秒钟后杀死它。

1
sudo timeout -k 10 1m ping 8.8.8.8

timeout -k “./test.sh”

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

保存退出状态

timeout在达到时间限制时返回124。否则,它将返回被管理命令的退出状态。
要想在达到时限时仍然返回命令的退出状态,请使用-preserve-status选项。

1
timeout --preserve-status 5 ping 8.8.8.8

在前台运行

默认情况下,timeout在后台运行管理的命令。如果你想在前台运行该命令,使用–前台选项。

1
timeout --foreground 5m ./script.sh

当你想运行一个需要用户输入的交互式命令时,这个选项很有用。

总结

超时命令用于运行一个有时间限制的指定命令。

timeout是一个简单的命令,没有太多的选项。通常情况下,你只用两个参数来调用timeout,即持续时间和被管理的命令。

QQ群:397745473

欢迎关注我的其它发布渠道