导致脚本休眠 (integer) EXPR 秒,如果没有给出参数,则永远休眠。返回实际休眠的秒数(整数)。
EXPR 应为正整数。如果使用负整数调用,sleep
不会休眠,而是会发出警告、设置 $!
(errno
) 并返回零。
如果使用非整数调用,则会忽略小数部分。
允许 sleep 0
,但仍然会调用对底层平台实现的函数调用,并产生任何可能的副作用。因此,sleep 0
与根本不休眠并不完全相同。
如果进程收到信号(例如 SIGALRM
),则可能会中断。
eval {
local $SIG{ALRM} = sub { die "Alarm!\n" };
sleep;
};
die $@ unless $@ eq "Alarm!\n";
你可能无法混合 alarm
和 sleep
调用,因为 sleep
通常使用 alarm
实现。
在一些较旧的系统上,它可能会比你要求的少休眠整整一秒,具体取决于它如何计算秒数。大多数现代系统总是休眠全部时间。然而,它们可能看起来休眠时间更长,因为在繁忙的多任务系统中,你的进程可能不会立即被调度。
对于粒度比一秒更精细的延迟,Time::HiRes 模块(来自 CPAN,从 Perl 5.8 开始成为标准发行版的一部分)提供了 usleep
。你还可以使用 select
的 Perl 四参数版本,让前三个参数未定义,或者你可能可以使用 syscall
接口访问 setitimer(2)(如果你的系统支持)。有关详细信息,请参见 perlfaq8。