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,则永远不会发送信号。

选项如下:

--preserve-status

以与 command 相同的状态退出,即使它超时并被杀死。

--foreground

不要将超时传播给 command 的孩子。

-s sig, --signal sig

指定超时时发送的信号。 默认情况下,发送 SIGTERM

-k time, --kill-after time

如果在发送第一个信号后的一段 time 后 command 仍在运行,则发送 SIGKILL 信号。

duration 时间和 time 是非负整数或实数(十进制),带有可选的单位指定后缀。 没有明确单位的值被解释为秒。

支持的单位符号有:

s

m

分钟

h

小时

d

如果未达到超时,则返回 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

最后更新于

FreeBSD 中文社区