用 `timeout` 限制命令的运行时长
防止 cron 任务和脚本永久挂起的 coreutils 命令——它的时长后缀和信号参数几乎没人记得全。
运行 `timeout 30s 命令` 即可在 30 秒后终止;若程序忽略第一个信号,用 `timeout -k 5s 30s 命令` 再等 5 秒后发送 SIGKILL。
01命令
命令
$ timeout 30s ping -c 100 example.com02作用说明
时长可直接写数字(秒)或加后缀:`500ms`、`30s`、`10m`、`2h`。timeout 先发送 SIGTERM;有些程序会捕获它,这正是容易被忘的 `-k`(kill-after)的用武之地——`timeout -k 5s 30s rsync ...` 会给进程 5 秒宽限期再发 SIGKILL。脚本中还有两个实用参数:`--preserve-status` 让退出码反映子进程状态;`-s INT` 改发 SIGINT,适合对 Ctrl+C 有特殊处理的程序。
03风险
!注意: 默认情况下 timeout 终止命令时返回退出码 124——脚本中应专门检查该值,以区分「超时」与真实失败。
04撤销
✓无需撤销——该命令不会改变持久状态。
05来源
- timeout(1) — run a command with a time limit依据: Documents DURATION suffixes (s/m/h), -k KILL after-time, -s signal selection, --preserve-status and -v
最后验证: 2026-09-17 · 分类: 开发者