Linux 命令速查
系统管理 man timeout

timeout

给命令设置最长运行时间,超时后终止

返回

补充说明

timeout 是 GNU coreutils 提供的看门狗式包装命令:启动指定程序,若它在给定时限内没有退出,就向它发送信号(默认 TERM)将其结束。常用于避免脚本被卡死的网络请求、交互式程序或死循环拖住。

时间单位可以带后缀:s 秒(默认)、m 分、h 小时、d 天,也接受小数如 0.5s。程序被超时杀死时,timeout 自身返回 124;若程序自己以其他状态退出,则原样返回该状态。

仅发送 TERM 时,进程可能捕获信号后继续运行,所以常配合 -k 设置“宽限期”:先 TERM,过若干秒仍未退出就 KILL。--preserve-status 让 timeout 返回子进程的真实退出码,而不是 124,适合在脚本中区分“超时”和“程序失败”。

语法

timeout [选项] 时长 命令 [参数...]

选项

  • -s, --signal 信号:指定超时后发送的信号,默认 TERM
  • -k, --kill-after 时长:宽限期后再发 KILL
  • --preserve-status:返回子进程的真实退出状态
  • --foreground:在前台运行,便于交互式程序接收终端信号
  • -v, --verbose:超时时打印提示信息
  • --help、--version:帮助与版本信息

实例

# 最多运行 5 秒
timeout 5s sleep 10

# 30 秒后发送 INT,模拟 Ctrl+C
timeout -s INT 30 ping example.com

# 先 TERM,10 秒后仍未退出则 KILL
timeout -k 10 60 ./long-task.sh

# 保留程序自身的退出码
timeout --preserve-status 10 curl -s https://example.com

# 在脚本中判断是否超时(退出码 124)
if ! timeout 3 ping -c1 host; then echo "超时或失败"; fi

参考链接