休眠, nsleep 或 usleep 子例程

用途

暂挂执行中的当前进程。

标准 C 库 (libc.a)

语法

#include <unistd.h>
unsigned int sleep ( Seconds)
#include <sys/time.h>
int nsleep ( Rqtp Rmtp)
struct timestruc_t *Rqtp, *Rmtp;
int usleep ( Useconds)
useconds_t Useconds

描述

sleepusleepnsleep 子例程暂挂当前进程,直到:

  • SecondsUsecondsRqtp 参数指定的时间间隔。
  • 将信号传递到启动信号捕获功能或结束进程的调用进程。
  • 通过事件通知功能向流程通知事件。

由于系统调度其他活动,暂挂时间可能比请求的时间长。 返回时,将更新由 Rmtp 参数指定的位置以显示时间间隔中剩余的时间,或者更新 0 (如果已经过完整时间间隔)。

参数

描述
Rqtp 为暂挂执行指定的时间间隔。
RMTp 指定时间间隔计时器或 0 上的剩余时间。
秒数 指定时间间隔 (以秒计)。
Useconds 指定时间间隔 (以微秒为单位)。 此参数仅可用于 usleep 子例程。

兼容性接口

sleepusleep 子例程是 nsleep 子例程的简化格式。 这些子例程确保与较旧版本的可移植操作系统接口 (POSIX) 和 Linux® 规范兼容。 sleep 子例程将当前进程暂挂一整秒。 usleep 子例程以微秒为单位暂挂当前进程,而 nsleep 子例程以纳秒为单位暂挂当前进程。

在 AIX® 版本 5.1或更高版本中,时间以纳秒为单位。 nsleep 子例程是 AIX 操作系统用于暂挂线程执行的系统调用。 sleepusleep 子例程充当 nsleep 子例程的前端。

暂挂进程的实际时间间隔是近似的。 由于系统调度的其他活动,暂挂进程的时间间隔可能需要较长时间,或者由于抢占暂挂的信号,进程暂挂可能需要较少时间。

对于 nsleep 子例程,必须指定 Rqtp (请求的时间暂停) 和 Rmtp (剩余时间暂停) 参数,以便可以确定暂挂进程的实际时间。 通常, Rmtp 参数中的值等效于零。 根据设计, Rqtp 参数中可能使用的最大值是一秒内的纳秒数。

示例

要将当前正在运行的进程暂挂 10 秒,请输入以下命令:
sleep (10)

返回值

如果所请求的时间已过去,那么 nsleepsleepusleep 子例程将返回值 0。

如果nsleep子例程返回值为-1,则表示已收到信号或事件通知,Rmtp参数将更新为请求时间减去睡眠时间(未睡眠时间),并设置errno全局变量。

如果 sleep 子例程由于传递信号而返回过早的唤醒,那么返回值为未休眠量 (请求的时间减去休眠时间) (以秒为单位)。

错误代码

如果nsleep子例程失败,则返回值为-1并将errno全局变量设置为下列错误代码之一:

描述
EINTR 呼叫进程检测到信号,并且从信号捕获例程返回控制,或者通过事件通知函数通知进程事件。
EINVAL Rqtp 参数指定了小于零或大于或等于 1 秒的纳秒值。
Efault 引用了通知内存的参数地址。
注: errno 也可以设置为 Efault

sleep 子例程始终成功,并且不会保留任何返回值以指示错误。