setitimer(2)


NAME

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

SYNOPSIS

   #include <sys/time.h>

   int getitimer(int which, struct itimerval *curr_value);
   int setitimer(int which, const struct itimerval *new_value,
                 struct itimerval *old_value);

DESCRIPTION

   These  system  calls provide access to interval timers, that is, timers
   that initially expire at some point in the future, and (optionally)  at
   regular  intervals  after  that.   When  a  timer  expires, a signal is
   generated for the calling process,  and  the  timer  is  reset  to  the
   specified interval (if the interval is nonzero).

   Three  types  of  timers—specified via the which argument—are provided,
   each of  which  counts  against  a  different  clock  and  generates  a
   different signal on timer expiration:

   ITIMER_REAL    This  timer counts down in real (i.e., wall clock) time.
                  At each expiration, a SIGALRM signal is generated.

   ITIMER_VIRTUAL This timer counts down against the  user-mode  CPU  time
                  consumed  by the process.  (The measurement includes CPU
                  time consumed by all threads in the process.)   At  each
                  expiration, a SIGVTALRM signal is generated.

   ITIMER_PROF    This  timer  counts  down  against the total (i.e., both
                  user and system) CPU time consumed by the process.  (The
                  measurement includes CPU time consumed by all threads in
                  the process.)  At each expiration, a SIGPROF  signal  is
                  generated.

                  In  conjunction  with  ITIMER_VIRTUAL, this timer can be
                  used to profile user and system CPU time consumed by the
                  process.

   A process has only one of each of the three types of timers.

   Timer values are defined by the following structures:

       struct itimerval {
           struct timeval it_interval; /* Interval for periodic timer */
           struct timeval it_value;    /* Time until next expiration */
       };

       struct timeval {
           time_t      tv_sec;         /* seconds */
           suseconds_t tv_usec;        /* microseconds */
       };

   getitimer()
   The  function  getitimer()  places  the  current  value  of  the  timer
   specified by which in the buffer pointed to by curr_value.

   The  it_value  substructure  is  populated  with  the  amount  of  time
   remaining until the next expiration of the specified timer.  This value
   changes as the timer counts down, and will be reset to it_interval when
   the  timer  expires.   If  both  fields of it_value are zero, then this
   timer is currently disarmed (inactive).

   The it_interval substructure is populated with the timer interval.   If
   both  fields  of it_interval are zero, then this is a single-shot timer
   (i.e., it expires just once).

   setitimer()
   The function setitimer() arms or disarms the timer specified by  which,
   by setting the timer to the value specified by new_value.  If old_value
   is non-NULL, the buffer it points to is used  to  return  the  previous
   value  of  the  timer  (i.e.,  the same information that is returned by
   getitimer()).

   If either field in new_value.it_value is nonzero,  then  the  timer  is
   armed  to  initially  expire  at the specified time.  If both fields in
   new_value.it_value are zero, then the timer is disarmed.

   The new_value.it_interval field specifies  the  new  interval  for  the
   timer; if both of its subfields are zero, the timer is single-shot.

RETURN VALUE

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

ERRORS

   EFAULT new_value, old_value, or curr_value is not valid a pointer.

   EINVAL which is not one of ITIMER_REAL, ITIMER_VIRTUAL, or ITIMER_PROF;
          or  (since  Linux  2.6.22)  one  of  the  tv_usec  fields in the
          structure pointed to by new_value contains a value  outside  the
          range 0 to 999999.

CONFORMING TO

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

NOTES

   Timers will never expire before the requested time, but may expire some
   (short)  time  afterward,  which depends on the system timer resolution
   and on the system load; see time(7).  (But see  BUGS  below.)   If  the
   timer   expires   while   the   process  is  active  (always  true  for
   ITIMER_VIRTUAL),  the  signal  will  be  delivered   immediately   when
   generated.

   A  child  created  via  fork(2)  does not inherit its parent's interval
   timers.  Interval timers are preserved across an execve(2).

   POSIX.1 leaves  the  interaction  between  setitimer()  and  the  three
   interfaces alarm(2), sleep(3), and usleep(3) unspecified.

   The standards are silent on the meaning of the call:

       setitimer(which, NULL, &old_value);

   Many  systems  (Solaris,  the  BSDs,  and perhaps others) treat this as
   equivalent to:

       getitimer(which, &old_value);

   In Linux, this is treated as being equivalent to a call  in  which  the
   new_value  fields  are zero; that is, the timer is disabled.  Don't use
   this Linux misfeature: it is nonportable and unnecessary.

BUGS

   The generation and delivery of a signal  are  distinct,  and  only  one
   instance  of  each  of  the  signals  listed above may be pending for a
   process.  Under very heavy loading, an  ITIMER_REAL  timer  may  expire
   before  the  signal from a previous expiration has been delivered.  The
   second signal in such an event will be lost.

   On Linux  kernels  before  2.6.16,  timer  values  are  represented  in
   jiffies.   If  a request is made set a timer with a value whose jiffies
   representation     exceeds     MAX_SEC_IN_JIFFIES      (defined      in
   include/linux/jiffies.h),  then the timer is silently truncated to this
   ceiling value.  On Linux/i386 (where, since Linux 2.6.13,  the  default
   jiffy  is 0.004 seconds), this means that the ceiling value for a timer
   is approximately 99.42 days.  Since Linux 2.6.16,  the  kernel  uses  a
   different  internal  representation  for  times,  and  this  ceiling is
   removed.

   On certain systems  (including  i386),  Linux  kernels  before  version
   2.6.12  have a bug which will produce premature timer expirations of up
   to one jiffy under some circumstances.  This bug  is  fixed  in  kernel
   2.6.12.

   POSIX.1-2001  says  that  setitimer() should fail if a tv_usec value is
   specified that is outside of  the  range  0  to  999999.   However,  in
   kernels  up  to and including 2.6.21, Linux does not give an error, but
   instead silently adjusts the corresponding seconds value for the timer.
   From  kernel  2.6.22  onward, this nonconformance has been repaired: an
   improper tv_usec value results in an EINVAL error.

SEE ALSO

   gettimeofday(2),     sigaction(2),     signal(2),      timer_create(2),
   timerfd_create(2), time(7)

COLOPHON

   This  page  is  part of release 4.09 of the Linux man-pages project.  A
   description of the project, information about reporting bugs,  and  the
   latest     version     of     this    page,    can    be    found    at
   https://www.kernel.org/doc/man-pages/.





Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.





Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.


Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.





Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.


Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.





Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.


Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.