timeout.1
TIMEOUT(1)
TIMEOUT(1)
FreeBSD General Commands Manual
TIMEOUT(1)
timeout
—
运行有时间限制的命令
timeout
[--signal
sig | -s
sig] [--preserve-status
] [--kill-after
time | -k
time] [--foreground
] duration command [args ...]
timeout
用它的 args 启动 command 。如果该 command 在 duration 时间后仍在运行,则将其杀死。默认情况下,发送 SIGTERM
。特殊 duration 时间为零,表示没有限制。因此,如果 duration 时间为 0,则永远不会发送信号。
选项如下:
以与 command 相同的状态退出,即使它超时并被杀死。
不要将超时传播给 command 的孩子。
-s
sig, --signal
sig
指定超时时发送的信号。 默认情况下,发送 SIGTERM
。
-k
time, --kill-after
time
如果在发送第一个信号后的一段 time 后 command 仍在运行,则发送 SIGKILL
信号。
duration 时间和 time 是非负整数或实数(十进制),带有可选的单位指定后缀。 没有明确单位的值被解释为秒。
支持的单位符号有:
秒
分钟
小时
天
如果未达到超时,则返回 command 的退出状态。
如果达到超时并设置了 --preserve-status
,则返回 command 的退出状态。 如果 --preserve-status
未设置,则返回退出状态 124。
如果 command 收到信号后退出,返回的退出状态为信号号加 128。
如果 command 引用了一个不存在的程序,则返回的退出状态为 127。
如果 command 是其他无效程序,则返回的退出状态为 126。
如果将无效参数传递给 -s
或 -k
, 则返回的退出状态为 125。
以 4 秒的时间限制运行 sleep(1) 。 由于命令在 2 秒内完成,因此退出状态为 0:
$ timeout 4 sleep 2 $ echo $? 0
运行 sleep(1) 4 秒并在 2 秒后终止进程。 因为没有使用 --preserve-status
,所以返回 124:
$ timeout 2 sleep 4 $ echo $? 124
与上述相同,但保留状态。 退出状态为 128 + 信号编号( SIGTERM 为 15)
$ timeout --preserve-status 2 sleep 4 $ echo $? 143
与上述相同,但发送 SIGALRM (信号编号 14)而不是 SIGTERM
$ timeout --preserve-status -s SIGALRM 2 sleep 4 $ echo $? 142
尝试 fetch(1) FreeBSD 手册的单页版本。 如果进程拒绝停止,则在 1 分钟后发送 SIGTERM 信号,并在 5 秒后发送 SIGKILL 信号:
timeout -k 5s 1m fetch \ https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/book.html
kill(1), signal(3)
timeout
命令最早出现在 FreeBSD 10.3 中。
Baptiste Daroussin <bapt@FreeBSD.org> 和 Vsevolod Stakhov <vsevolod@FreeBSD.org>
July 7, 2020
FreeBSD 13.1-RELEASE
最后更新于
这有帮助吗?