sleep(9r)sleep(9r)NAMEsleep - General: Puts a calling process to sleepSYNOPSIS
void sleep(
caddr_t *channel,
long pri );
ARGUMENTS
Specifies a unique address associated with the calling kernel thread to
be put to sleep. Specifies whether the sleep request is interruptible.
Setting this argument to the PCATCH flag causes the process to sleep in
an interruptible state (that is, the kernel thread can take asynchro‐
nous signals). Not setting the PCATCH flag causes the process to sleep
in an uninterruptible state (that is, the kernel thread cannot take
asynchronous signals).
DESCRIPTION
The sleep routine puts a calling process to sleep on the address speci‐
fied by the channel argument. Some common addresses are the lbolt argu‐
ment, a buf structure, and a proc structure. This address should be
unique to prevent unexpected wake/sleep cycles, which can occur if dif‐
ferent processes are sleeping on the same address accidentally. If you
set the PCATCH flag in the pri argument, the sleep routine puts signals
on the queue and does not wake up the sleeping process.
The sleep and wakeup routines block and then wake up a process. Gener‐
ally, device drivers call these routines to wait for the transfer to
complete an interrupt from the device. That is, the write routine of
the device driver sleeps on the address of a known location, and the
device's Interrupt Service Interface (ISI) wakes the process when the
device interrupts. It is the responsibility of the wakened process to
check if the condition for which it was sleeping has been removed.
NOTES
The operating system provides two ways to put a process to sleep:
interruptible and uninterruptible. The sleep routine performs an unin‐
terruptible sleep operation if you do not set the PCATCH flag and an
interruptible sleep operation if you set the PCATCH flag. This means
that device drivers cannot call sleep at interrupt context because at
interrupt context there is no calling process to be put to sleep. Thus,
a device driver's Interrupt Service Interface (ISI) and those routines
called from within the ISI must not call the sleep routine.
On this operating system, you cannot use pri to set the scheduling pri‐
ority of the calling process.
RETURN VALUES
None
FILESSEE ALSO
Routines: wakeup(9r)sleep(9r)