1GETITIMER(2)               Linux Programmer's Manual              GETITIMER(2)
2
3
4

NAME

6       getitimer, setitimer - get or set value of an interval timer
7

SYNOPSIS

9       #include <sys/time.h>
10
11       int getitimer(int which, struct itimerval *curr_value);
12       int setitimer(int which, const struct itimerval *new_value,
13                     struct itimerval *old_value);
14

DESCRIPTION

16       These  system  calls provide access to interval timers, that is, timers
17       that initially expire at some point in the future, and (optionally)  at
18       regular intervals after that.  When a timer expires, a signal is gener‐
19       ated for the calling process, and the timer is reset to  the  specified
20       interval (if the interval is nonzero).
21
22       Three  types  of  timers—specified via the which argument—are provided,
23       each of which counts against a different clock and generates a  differ‐
24       ent signal on timer expiration:
25
26       ITIMER_REAL    This  timer counts down in real (i.e., wall clock) time.
27                      At each expiration, a SIGALRM signal is generated.
28
29       ITIMER_VIRTUAL This timer counts down against the  user-mode  CPU  time
30                      consumed  by the process.  (The measurement includes CPU
31                      time consumed by all threads in the process.)   At  each
32                      expiration, a SIGVTALRM signal is generated.
33
34       ITIMER_PROF    This  timer  counts  down  against the total (i.e., both
35                      user and system) CPU time consumed by the process.  (The
36                      measurement includes CPU time consumed by all threads in
37                      the process.)  At each expiration, a SIGPROF  signal  is
38                      generated.
39
40                      In  conjunction  with  ITIMER_VIRTUAL, this timer can be
41                      used to profile user and system CPU time consumed by the
42                      process.
43
44       A process has only one of each of the three types of timers.
45
46       Timer values are defined by the following structures:
47
48           struct itimerval {
49               struct timeval it_interval; /* Interval for periodic timer */
50               struct timeval it_value;    /* Time until next expiration */
51           };
52
53           struct timeval {
54               time_t      tv_sec;         /* seconds */
55               suseconds_t tv_usec;        /* microseconds */
56           };
57
58   getitimer()
59       The  function  getitimer() places the current value of the timer speci‐
60       fied by which in the buffer pointed to by curr_value.
61
62       The it_value substructure is populated with the amount of time  remain‐
63       ing  until  the  next  expiration  of  the specified timer.  This value
64       changes as the timer counts down, and will be reset to it_interval when
65       the  timer  expires.   If  both  fields of it_value are zero, then this
66       timer is currently disarmed (inactive).
67
68       The it_interval substructure is populated with the timer interval.   If
69       both  fields  of it_interval are zero, then this is a single-shot timer
70       (i.e., it expires just once).
71
72   setitimer()
73       The function setitimer() arms or disarms the timer specified by  which,
74       by setting the timer to the value specified by new_value.  If old_value
75       is non-NULL, the buffer it points to is used  to  return  the  previous
76       value  of  the  timer  (i.e.,  the same information that is returned by
77       getitimer()).
78
79       If either field in new_value.it_value is nonzero,  then  the  timer  is
80       armed  to  initially  expire  at the specified time.  If both fields in
81       new_value.it_value are zero, then the timer is disarmed.
82
83       The new_value.it_interval field specifies  the  new  interval  for  the
84       timer; if both of its subfields are zero, the timer is single-shot.
85

RETURN VALUE

87       On  success,  zero is returned.  On error, -1 is returned, and errno is
88       set appropriately.
89

ERRORS

91       EFAULT new_value, old_value, or curr_value is not valid a pointer.
92
93       EINVAL which is not one of ITIMER_REAL, ITIMER_VIRTUAL, or ITIMER_PROF;
94              or  (since Linux 2.6.22) one of the tv_usec fields in the struc‐
95              ture pointed to by new_value contains a value outside the  range
96              0 to 999999.
97

CONFORMING TO

99       POSIX.1-2001,  SVr4,  4.4BSD  (this  call  first  appeared  in 4.2BSD).
100       POSIX.1-2008 marks getitimer() and setitimer()  obsolete,  recommending
101       the  use  of  the POSIX timers API (timer_gettime(2), timer_settime(2),
102       etc.) instead.
103

NOTES

105       Timers will never expire before the requested time, but may expire some
106       (short)  time  afterward,  which depends on the system timer resolution
107       and on the system load; see time(7).  (But see  BUGS  below.)   If  the
108       timer  expires while the process is active (always true for ITIMER_VIR‐
109       TUAL), the signal will be delivered immediately when generated.
110
111       A child created via fork(2) does  not  inherit  its  parent's  interval
112       timers.  Interval timers are preserved across an execve(2).
113
114       POSIX.1 leaves the interaction between setitimer() and the three inter‐
115       faces alarm(2), sleep(3), and usleep(3) unspecified.
116
117       The standards are silent on the meaning of the call:
118
119           setitimer(which, NULL, &old_value);
120
121       Many systems (Solaris, the BSDs, and  perhaps  others)  treat  this  as
122       equivalent to:
123
124           getitimer(which, &old_value);
125
126       In  Linux,  this  is treated as being equivalent to a call in which the
127       new_value fields are zero; that is, the timer is disabled.   Don't  use
128       this Linux misfeature: it is nonportable and unnecessary.
129

BUGS

131       The  generation  and  delivery  of  a signal are distinct, and only one
132       instance of each of the signals listed  above  may  be  pending  for  a
133       process.   Under  very  heavy  loading, an ITIMER_REAL timer may expire
134       before the signal from a previous expiration has been  delivered.   The
135       second signal in such an event will be lost.
136
137       On  Linux  kernels  before  2.6.16,  timer  values  are  represented in
138       jiffies.  If a request is made set a timer with a value  whose  jiffies
139       representation      exceeds      MAX_SEC_IN_JIFFIES     (defined     in
140       include/linux/jiffies.h), then the timer is silently truncated to  this
141       ceiling  value.   On Linux/i386 (where, since Linux 2.6.13, the default
142       jiffy is 0.004 seconds), this means that the ceiling value for a  timer
143       is  approximately  99.42  days.   Since Linux 2.6.16, the kernel uses a
144       different internal  representation  for  times,  and  this  ceiling  is
145       removed.
146
147       On  certain  systems  (including  i386),  Linux  kernels before version
148       2.6.12 have a bug which will produce premature timer expirations of  up
149       to  one  jiffy  under  some circumstances.  This bug is fixed in kernel
150       2.6.12.
151
152       POSIX.1-2001 says that setitimer() should fail if a  tv_usec  value  is
153       specified  that  is outside of the range 0 to 999999.  However, in ker‐
154       nels up to and including 2.6.21, Linux does  not  give  an  error,  but
155       instead silently adjusts the corresponding seconds value for the timer.
156       From kernel 2.6.22 onward, this nonconformance has  been  repaired:  an
157       improper tv_usec value results in an EINVAL error.
158

SEE ALSO

160       gettimeofday(2), sigaction(2), signal(2), timer_create(2), timerfd_cre‐
161       ate(2), time(7)
162

COLOPHON

164       This page is part of release 4.15 of the Linux  man-pages  project.   A
165       description  of  the project, information about reporting bugs, and the
166       latest    version    of    this    page,    can     be     found     at
167       https://www.kernel.org/doc/man-pages/.
168
169
170
171Linux                             2017-09-15                      GETITIMER(2)
Impressum