国际访客建议访问 Primers 编程伙伴 国际版站点 > Bash 教程 > timeout 以获得更好的体验。

# Bash 的 timeout 命令

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

!subtitle:功能

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

!subtitle:类型

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

!subtitle:参数

  • 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 - 命令的参数列表

!subtitle:返回值

  • 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)
本文 更新于: 2026-03-06 09:52:35 创建于: 2026-03-06 09:52:35