1 .\" Copyright (C) Markus Kuhn, 1996
2 .\" and Copyright (C) Linux Foundation, 2008, written by Michael Kerrisk
3 .\" <mtk.manpages@gmail.com>
5 .\" %%%LICENSE_START(GPLv2+_DOC_FULL)
6 .\" This is free documentation; you can redistribute it and/or
7 .\" modify it under the terms of the GNU General Public License as
8 .\" published by the Free Software Foundation; either version 2 of
9 .\" the License, or (at your option) any later version.
11 .\" The GNU General Public License's references to "object code"
12 .\" and "executables" are to be interpreted as the output of any
13 .\" document formatting or typesetting system, including
14 .\" intermediate and printed output.
16 .\" This manual is distributed in the hope that it will be useful,
17 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
18 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 .\" GNU General Public License for more details.
21 .\" You should have received a copy of the GNU General Public
22 .\" License along with this manual; if not, see
23 .\" <http://www.gnu.org/licenses/>.
26 .\" 1996-04-10 Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
27 .\" First version written
28 .\" Modified, 2004-10-24, aeb
30 .\" Minor rewrites of some parts.
31 .\" NOTES: describe case where clock_nanosleep() can be preferable.
32 .\" NOTES: describe CLOCK_REALTIME versus CLOCK_NANOSLEEP
33 .\" Replace crufty discussion of HZ with a pointer to time(7).
34 .TH NANOSLEEP 2 2021-03-22 "Linux" "Linux Programmer's Manual"
36 nanosleep \- high-resolution sleep
41 .BI "int nanosleep(const struct timespec *" req ", struct timespec *" rem );
45 Feature Test Macro Requirements for glibc (see
46 .BR feature_test_macros (7)):
51 _POSIX_C_SOURCE >= 199309L
55 suspends the execution of the calling thread
56 until either at least the time specified in
58 has elapsed, or the delivery of a signal
59 that triggers the invocation of a handler in the calling thread or
60 that terminates the process.
62 If the call is interrupted by a signal handler,
68 and writes the remaining time into the structure pointed to by
75 can then be used to call
77 again and complete the specified pause (but see NOTES).
81 is used to specify intervals of time with nanosecond precision.
82 It is defined as follows:
87 time_t tv_sec; /* seconds */
88 long tv_nsec; /* nanoseconds */
93 The value of the nanoseconds field must be in the range 0 to 999999999.
100 has the following advantages:
101 it provides a higher resolution for specifying the sleep interval;
102 POSIX.1 explicitly specifies that it
103 does not interact with signals;
104 and it makes the task of resuming a sleep that has been
105 interrupted by a signal handler easier.
107 On successfully sleeping for the requested interval,
110 If the call is interrupted by a signal handler or encounters an error,
111 then it returns \-1, with
113 set to indicate the error.
117 Problem with copying information from user space.
120 The pause has been interrupted by a signal that was
121 delivered to the thread (see
123 The remaining sleep time has been written
126 so that the thread can easily call
128 again and continue with the pause.
133 field was not in the range 0 to 999999999 or
137 POSIX.1-2001, POSIX.1-2008.
139 If the interval specified in
141 is not an exact multiple of the granularity underlying clock (see
143 then the interval will be rounded up to the next multiple.
144 Furthermore, after the sleep completes, there may still be a delay before
145 the CPU becomes free to once again execute the calling thread.
149 sleeps for a relative interval can be problematic if the call
150 is repeatedly restarted after being interrupted by signals,
151 since the time between the interruptions and restarts of the call
152 will lead to drift in the time when the sleep finally completes.
153 This problem can be avoided by using
154 .BR clock_nanosleep (2)
155 with an absolute time value.
157 POSIX.1 specifies that
159 should measure time against the
162 However, Linux measures the time using the
165 .\" See also http://thread.gmane.org/gmane.linux.kernel/696854/
166 .\" Subject: nanosleep() uses CLOCK_MONOTONIC, should be CLOCK_REALTIME?
167 .\" Date: 2008-06-22 07:35:41 GMT
168 This probably does not matter, since the POSIX.1 specification for
169 .BR clock_settime (2)
170 says that discontinuous changes in
176 Setting the value of the
179 .BR clock_settime (2)
181 have no effect on threads that are blocked waiting for a relative time
182 service based upon this clock, including the
185 Consequently, these time services shall expire when the requested relative
186 interval elapses, independently of the new or old value of the clock.
189 In order to support applications requiring much more precise pauses
190 (e.g., in order to control some time-critical hardware),
192 would handle pauses of up to 2 milliseconds by busy waiting with microsecond
193 precision when called from a thread scheduled under a real-time policy
198 This special extension was removed in kernel 2.5.39,
199 and is thus not available in Linux 2.6.0 and later kernels.
201 If a program that catches signals and uses
203 receives signals at a very high rate,
204 then scheduling delays and rounding errors in the kernel's
205 calculation of the sleep interval and the returned
211 on successive restarts of the
214 To avoid such problems, use
215 .BR clock_nanosleep (2)
218 flag to sleep to an absolute deadline.
222 is stopped by a signal (e.g.,
224 then the call fails with the error
226 after the thread is resumed by a
229 If the system call is subsequently restarted,
230 then the time that the thread spent in the stopped state is
232 counted against the sleep interval.
233 This problem is fixed in Linux 2.6.0 and later kernels.
235 .BR clock_nanosleep (2),
236 .BR restart_syscall (2),
237 .BR sched_setscheduler (2),
238 .BR timer_create (2),