Command `timeout`
命令 timeout
可以在有限的时间内执行命令。限制命令的执行时间,当到达指定的时间而命令仍在执行中时,timeout
会向命令发送信号 TERM
。
格式
timeout [OPTION] DURATION COMMAND [ARG]...
timeout [OPTION]
描述
timeout
会启动命令 COMMAND,如果它在时间 DURATION 后仍然运行,则停止它。
--preserve-status
以与 COMMAND 相同的状态码退出,即使命令已超时。
--foreground
当 timeout
不是直接从 shell 运行时,允许 COMMAND 从 TTY 读取标准输入和获取 TTY 的信号。在这个模式下 COMMAND 的子进程永远不会超时。
-k, --kill-after=DURATION
如果 COMMAND 在指定时间后仍然在运行,向其发送信号 KILL
。
-s, --signal=SIGNAL
发送指定信号而不是默认的 TERM
。
-v, --verbose
在 stderr 中显示详细信息。
--help
显示帮助信息并退出。
--version
显示版本信息并退出。
DURATION 定义了超时时间,支持浮点数,缺少单位时以秒为单位。单位:s
代表秒,m
代表分,h
代表小时,d
代表天。
当到达超时时间时,timeout
会向 COMMAND
发送 TERM
或指定的信号。
返回码
124
COMMAND 超时并且未指定 --preserve-status
。
125
COMMAND 执行失败。
126
COMMAND 存在但无法调用。
127
COMMAND 不存在。
137
COMMAND 或 timeout
本事被发送信号 KILL
。
例子
#!/bin/bash
set -o errexit
set -o pipefail
set -o nounset
rc=0
timeout 10m some-command || rc=$?
if [[ $rc == 124 ]]; then
echo >&2 "some-command times out"
fi
exit $rc