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

RETURN VALUE

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

ERRORS

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

CONFORMING TO

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

NOTES

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

BUGS

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

SEE ALSO

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

COLOPHON

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