GETITIMER(2) System Calls GETITIMER(2)

NAME


getitimer, setitimer - get or set value of interval timer

SYNOPSIS


#include <sys/time.h>

int getitimer(int which, struct itimerval *value);


int setitimer(int which, const struct itimerval *value,
struct itimerval *ovalue);


DESCRIPTION


The system provides each process with four interval timers, defined in
<sys/time.h>. The getitimer() function stores the current value of the
timer specified by which into the structure pointed to by value. The
setitimer() function call sets the value of the timer specified by which
to the value specified in the structure pointed to by value, and if
ovalue is not NULL, stores the previous value of the timer in the
structure pointed to by ovalue.


A timer value is defined by the itimerval structure (see
gettimeofday(3C)) for the definition of timeval), which includes the
following members:

struct timeval it_interval; /* timer interval */
struct timeval it_value; /* current value */


The it_value member indicates the time to the next timer expiration. The
it_interval member specifies a value to be used in reloading it_value
when the timer expires. Setting it_value to 0 disables a timer,
regardless of the value of it_interval. Setting it_interval to 0 disables
a timer after its next expiration (assuming it_value is non-zero).


Time values smaller than the resolution of the system clock are rounded
up to the resolution of the system clock, except for ITIMER_REALPROF,
whose values are rounded up to the resolution of the profiling clock. The
four timers are as follows:

ITIMER_REAL
Decrements in real time. A SIGALRM signal is
delivered to the process when this timer expires.


ITIMER_VIRTUAL
Decrements in lightweight process (lwp) virtual time.
It runs only when the calling lwp is executing. A
SIGVTALRM signal is delivered to the calling lwp when
it expires.


ITIMER_PROF
Decrements both in lightweight process (lwp) virtual
time and when the system is running on behalf of the
lwp. It is designed to be used by interpreters in
statistically profiling the execution of interpreted
programs. Each time the ITIMER_PROF timer expires, the
SIGPROF signal is delivered to the calling lwp.
Because this signal may interrupt in-progress
functions, programs using this timer must be prepared
to restart interrupted functions.


ITIMER_REALPROF
Decrements in real time. It is designed to be used for
real-time profiling of multithreaded programs. Each
time the ITIMER_REALPROF timer expires, one counter in
a set of counters maintained by the system for each
lightweight process (lwp) is incremented. The counter
corresponds to the state of the lwp at the time of the
timer tick. All lwps executing in user mode when the
timer expires are interrupted into system mode. When
each lwp resumes execution in user mode, if any of the
elements in its set of counters are non-zero, the
SIGPROF signal is delivered to the lwp. The SIGPROF
signal is delivered before any other signal except
SIGKILL. This signal does not interrupt any in-
progress function. A siginfo structure, defined in
<sys/siginfo.h>, is associated with the delivery of
the SIGPROF signal, and includes the following
members:

si_tstamp; /* high resolution timestamp */
si_syscall; /* current syscall */
si_nsysarg; /* number of syscall arguments */
si_sysarg[]; /* actual syscall arguments */
si_fault; /* last fault type */
si_faddr; /* last fault address */
si_mstate[]; /* ticks in each microstate */

The enumeration of microstates (indices into
si_mstate) is defined in <sys/msacct.h>.

Unlike the other interval timers, the ITIMER_REALPROF
interval timer is not inherited across a call to one
of the exec(2) family of functions.


RETURN VALUES


Upon successful completion, 0 is returned. Otherwise, -1 is returned and
errno is set to indicate the error.

ERRORS


The getitimer() and setitimer() functions will fail if:

EINVAL
The specified number of seconds is greater than 100,000,000,
the number of microseconds is greater than or equal to
1,000,000, or the which argument is unrecognized.


ATTRIBUTES


See attributes(7) for descriptions of the following attributes:


+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Standard |
+--------------------+-----------------+
|MT-Level | MT-Safe |
+--------------------+-----------------+

SEE ALSO


alarm(2), exec(2), gettimeofday(3C), sleep(3C), sysconf(3C),
attributes(7), standards(7)

NOTES


The setitimer() function is independent of the alarm(2) and sleep(3C)
functions.


The ITIMER_PROF and ITIMER_REALPROF timers deliver the same signal and
have different semantics. They cannot be used together.


The granularity of the resolution of alarm time is platform-dependent.

June 15, 2009 GETITIMER(2)