sleep EXPR
sleep

导致脚本休眠 (integer) EXPR 秒,如果没有给出参数,则永远休眠。返回实际休眠的秒数(整数)。

EXPR 应为正整数。如果使用负整数调用,sleep 不会休眠,而是会发出警告、设置 $! (errno) 并返回零。

如果使用非整数调用,则会忽略小数部分。

允许 sleep 0,但仍然会调用对底层平台实现的函数调用,并产生任何可能的副作用。因此,sleep 0 与根本不休眠并不完全相同。

如果进程收到信号(例如 SIGALRM),则可能会中断。

eval {
    local $SIG{ALRM} = sub { die "Alarm!\n" };
    sleep;
};
die $@ unless $@ eq "Alarm!\n";

你可能无法混合 alarmsleep 调用,因为 sleep 通常使用 alarm 实现。

在一些较旧的系统上,它可能会比你要求的少休眠整整一秒,具体取决于它如何计算秒数。大多数现代系统总是休眠全部时间。然而,它们可能看起来休眠时间更长,因为在繁忙的多任务系统中,你的进程可能不会立即被调度。

对于粒度比一秒更精细的延迟,Time::HiRes 模块(来自 CPAN,从 Perl 5.8 开始成为标准发行版的一部分)提供了 usleep。你还可以使用 select 的 Perl 四参数版本,让前三个参数未定义,或者你可能可以使用 syscall 接口访问 setitimer(2)(如果你的系统支持)。有关详细信息,请参见 perlfaq8

另请参阅 POSIX 模块的 pause 函数。