Rev | Author | # | Line |
---|---|---|---|
3 | perry | 1 | GETITIMER |
2 | !!!GETITIMER | ||
3 | ---- | ||
4 | !!NAME | ||
5 | |||
6 | getitimer, setitimer - get or set value of an interval timer | ||
7 | !!SYNOPSIS | ||
8 | |||
9 | |||
5 | PerryLorier | 10 | __#include <sys/time.h>__ |
3 | perry | 11 | |
5 | PerryLorier | 12 | __int getitimer(int__ ''which''__, struct itimerval *__''value''__);__ |
13 | __int setitimer(int__ ''which''__, const struct itimerval *__''value''__, struct itimerval *__''ovalue''__);__ | ||
3 | perry | 14 | !!DESCRIPTION |
15 | |||
16 | The system provides each process with three interval timers, | ||
17 | each decrementing in a distinct time domain. When any timer | ||
18 | expires, a signal is sent to the process, and the timer | ||
19 | (potentially) restarts. | ||
20 | |||
5 | PerryLorier | 21 | ;__ITIMER_REAL__: decrements in real time, and delivers __SIGALRM__ upon expiration. |
22 | ;__ITIMER_VIRTUAL__: decrements only when the process is executing, and delivers __SIGVTALRM__ upon expiration. | ||
23 | ;__ITIMER_PROF__: decrements both when the process executes and when the system is executing on behalf of the process. Coupled with __ITIMER_VIRTUAL__, this timer is usually used to profile the time spent by the application in user and kernel space. | ||
24 | ;__SIGPROF__: is delivered upon expiration. | ||
3 | perry | 25 | |
26 | Timer values are defined by the following | ||
27 | structures: | ||
28 | |||
5 | PerryLorier | 29 | struct itimerval { |
30 | struct timeval it_interval; /* next value */ | ||
31 | struct timeval it_value; /* current value */ | ||
32 | }; | ||
33 | struct timeval { | ||
34 | long tv_sec; /* seconds */ | ||
35 | long tv_usec; /* microseconds */ | ||
36 | }; | ||
3 | perry | 37 | |
5 | PerryLorier | 38 | getitimer(2) fills the structure indicated by ''value'' with the current setting for the timer indicated by ''which'' (one of __ITIMER_REAL__, __ITIMER_VIRTUAL__, or __ITIMER_PROF__). The element __it_value__ is set to the amount of time remaining on the timer, or zero if the timer is disabled. Similarly, __it_interval__ is set to the reset value. setitimer(2) sets the indicated timer to the value in ''value''. If ''ovalue'' is nonzero, the old value of the timer is stored there. |
3 | perry | 39 | |
5 | PerryLorier | 40 | Timers decrement from ''it_value'' to zero, generate a signal, and reset to ''it_interval''. A timer which is set to zero (''it_value'' is zero or the timer expires and ''it_interval'' is zero) stops. |
3 | perry | 41 | |
5 | PerryLorier | 42 | Both ''tv_sec'' and ''tv_usec'' are significant in determining the duration of a timer. |
3 | perry | 43 | |
5 | PerryLorier | 44 | Timers will never expire before the requested time, instead expiring some short, constant time afterwards, dependent on the system timer resolution (currently 10ms). Upon expiration, a signal will be generated and the timer reset. If the timer expires while the process is active (always true for __ITIMER_VIRT__) the signal will be delivered immediately when generated. Otherwise the delivery will be offset by a small time dependent on the system loading. |
3 | perry | 45 | |
46 | !!RETURN VALUE | ||
47 | |||
5 | PerryLorier | 48 | On success, zero is returned. On error, -1 is returned, and ''errno'' is set appropriately. |
3 | perry | 49 | !!ERRORS |
50 | |||
5 | PerryLorier | 51 | ;[EFAULT]: ''value'' or ''ovalue'' are not valid pointers. |
52 | ;[EINVAL]: ''which'' is not one of __ITIMER_REAL__, __ITIMER_VIRT__, or __ITIMER_PROF__. | ||
3 | perry | 53 | |
54 | !!CONFORMING TO | ||
55 | |||
5 | PerryLorier | 56 | SVr4, 4.4BSD (This call first appeared in 4.2BSD). |
3 | perry | 57 | |
58 | !!SEE ALSO | ||
59 | |||
5 | PerryLorier | 60 | gettimeofday(2), sigaction(2), signal(2) |
3 | perry | 61 | |
62 | !!BUGS | ||
63 | |||
5 | PerryLorier | 64 | Under Linux, the generation and delivery of a signal are distinct, and there each signal is permitted only one outstanding event. It's therefore conceivable that under pathologically heavy loading, __ITIMER_REAL__ will expire before the signal from a previous expiration has been delivered. The second signal in such an event will be lost. |
lib/blame.php:177: Warning: Invalid argument supplied for foreach() (...repeated 7 times)