4292

21 分钟

#Bash 的 timeout 命令

timeout [OPTION] DURATION COMMAND [ARG]...

功能

执行命令时附带超时限制。

类型

可执行文件(/usr/bin/timeout),属于 coreutils

参数

  • OPTION 选项:
    • --preserve-status - 超时时仍返回 COMMAND 的返回值
    • --foreground - 当不从 shell 运行命令时,运行 COMMAND 从 tty 读取输入和接收信号;此模式下 COMMAND 创建的子进程不会超时
    • -k, --kill-after=DURATION - 发送信号后如果经过 DURATION 时间仍未退出,则发送 SIGKILL
    • -s, --signal=SIGNAL - 指定超时时发送的信号
    • -v, --verbose - 打印详细信息
    • --help - 显示帮助
    • --version - 显示版本
  • DURATION - 超时时间
  • COMMAND - 执行的命令
  • ARG - 命令的参数列表

返回值

  • 124 - 超时(且未启用 --preserve-status 选项)
  • 125 - timeout 自身失败
  • 126 - COMMAND 不能运行
  • 127 - COMMAND 不存在
  • 137 - SIGKILL
  • 其它情况返回 COMMAND 的返回值

#示例

$ timeout -v 3s sleep 10s timeout: sending signal TERM to command ‘sleep’

#推荐阅读

#手册

TIMEOUT(1) User Commands TIMEOUT(1) NAME timeout - run a command with a time limit SYNOPSIS timeout [OPTION] DURATION COMMAND [ARG]... timeout [OPTION] DESCRIPTION Start COMMAND, and kill it if still running after DURATION. Mandatory arguments to long options are mandatory for short options too. --preserve-status exit with the same status as COMMAND, even when the command times out --foreground when not running timeout directly from a shell prompt, allow COMMAND to read from the TTY and get TTY signals; in this mode, children of COMMAND will not be timed out -k, --kill-after=DURATION also send a KILL signal if COMMAND is still running this long after the initial signal was sent -s, --signal=SIGNAL specify the signal to be sent on timeout; SIGNAL may be a name like 'HUP' or a number; see 'kill -l' for a list of signals -v, --verbose diagnose to stderr any signal sent upon timeout --help display this help and exit --version output version information and exit DURATION is a floating point number with an optional suffix: 's' for seconds (the default), 'm' for minutes, 'h' for hours or 'd' for days. A duration of 0 disables the associated timeout. Upon timeout, send the TERM signal to COMMAND, if no other SIGNAL spec‐ ified. The TERM signal kills any process that does not block or catch that signal. It may be necessary to use the KILL signal, since this signal can't be caught. Exit status: 124 if COMMAND times out, and --preserve-status is not specified 125 if the timeout command itself fails 126 if COMMAND is found but cannot be invoked 127 if COMMAND cannot be found 137 if COMMAND (or timeout itself) is sent the KILL (9) signal (128+9) - the exit status of COMMAND otherwise BUGS Some platforms don't currently support timeouts beyond the year 2038. AUTHOR Written by Padraig Brady. REPORTING BUGS GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report any translation bugs to <https://translationproject.org/team/> COPYRIGHT Copyright © 2023 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO kill(1) Full documentation <https://www.gnu.org/software/coreutils/timeout> or available locally via: info '(coreutils) timeout invocation' GNU coreutils 9.4 April 2024 TIMEOUT(1)

创建于 2025/12/5

更新于 2025/12/5