用 `timeout` 限制命令的运行时长

防止 cron 任务和脚本永久挂起的 coreutils 命令——它的时长后缀和信号参数几乎没人记得全。

Linux安全超时coreutils 工具脚本低风险
运行 `timeout 30s 命令` 即可在 30 秒后终止;若程序忽略第一个信号,用 `timeout -k 5s 30s 命令` 再等 5 秒后发送 SIGKILL。

01命令

命令
$ timeout 30s ping -c 100 example.com

02作用说明

时长可直接写数字(秒)或加后缀:`500ms`、`30s`、`10m`、`2h`。timeout 先发送 SIGTERM;有些程序会捕获它,这正是容易被忘的 `-k`(kill-after)的用武之地——`timeout -k 5s 30s rsync ...` 会给进程 5 秒宽限期再发 SIGKILL。脚本中还有两个实用参数:`--preserve-status` 让退出码反映子进程状态;`-s INT` 改发 SIGINT,适合对 Ctrl+C 有特殊处理的程序。

03风险

风险低风险
使用条件Part of GNU coreutils, preinstalled on all Linux distros
!注意: 默认情况下 timeout 终止命令时返回退出码 124——脚本中应专门检查该值,以区分「超时」与真实失败。

04撤销

✓无需撤销——该命令不会改变持久状态。

05来源

最后验证: 2026-09-17 · 分类: 开发者