Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       getitimer, setitimer - считывает или устанавливает значение таймера интервалов

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

ОБЗОР

       #include <sys/time.h>

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

ОПИСАНИЕ

       Данные  системные  вызовы  предоставляют  доступ  к  интервальным  таймерам,  то есть таймерам, у которых
       изначально истекает срок в будущем, и (необязательно) с регулярными интервалами после.  Когда  у  таймера
       истекает  срок,  вызвавшему процессу отправляется сигнал и таймер перезапускается с задаваемым интервалом
       (если интервал не равен нулю).

       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
              Этот  таймер  отсчитывается  по  реальному времени (то есть обычному). По каждому истечению выдаёт
              сигнал SIGALRM.

       ITIMER_VIRTUAL
              Этот таймер отсчитывается по времени ЦП в пользовательском  режиме,  проведённым  процессом  (учёт
              включает  время  ЦП,  потреблённое  всеми  нитями  процесса).  По  каждому истечению выдаёт сигнал
              SIGVTALRM.

       ITIMER_PROF
              Этот таймер отсчитывается по полному времени ЦП, потраченному процессом (учёт включает  время  ЦП,
              потреблённое всеми нитями процесса). По каждому истечению выдаёт сигнал SIGPROF.

              Данный  таймер  вместе  с  ITIMER_VIRTUAL  можно  использовать для профилирования затрат процессом
              системного и пользовательского времени ЦП.

       Процесс может иметь только по одному таймеру каждого типа.

       Величина, на которую устанавливается таймер, определяется следующими структурами:

           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()
       Функция getitimer() помещает  текущее  значение  таймера,  указанного  в  which,  в  буфер,  указанный  в
       curr_value.

       Вложенная структура it_value содержит количество оставшегося времени до следующего истечения таймера. Это
       значение  изменяется  после  начала отсчёта таймера и будет сброшено в it_interval при истечении таймера.
       Если оба поля it_value равны нулю, то это означает что таймер выключен (неактивен).

       Вложенная структура it_interval содержит интервал таймера. Если оба поля it_intervalравны  нулю,  то  это
       указывает на одноразовый таймер (то срабатывающий один раз).

   setitimer()
       Функция setitimer() настраивает таймер which значением new_value. Если значение old_value не NULL, то оно
       указывает  на  буфер,  в который сохраняется предыдущее значение таймера (т. е., информация, возвращаемая
       getitimer()).

       Если какое-то из  полей  в  new_value.it_value  не  равно  нулю,  то  таймер  изначально  включается  как
       просроченный на указанное время. Если оба поля в new_value.it_value равны нулю, то таймер отключён.

       Поле  new_value.it_interval  задаёт  новый  интервал  таймера;если  оба  поля равны нулю, то таймер будет
       одноразовым.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       При успешном выполнении возвращается 0. При ошибке возвращается -1, а в errno содержится код ошибки.

ОШИБКИ

       EFAULT Указатели new_value, old_value или curr_value являются некорректными.

       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,
              999999].

ВЕРСИИ

       В стандартах ничего не говорится о значении вызова:

           setitimer(which, NULL, &old_value);

       В многих системах (Solaris, BSD и, возможно, другие) он считается эквивалентом:

           getitimer(which, &old_value);

       В  Linux  это  эквивалентно  вызову,  в  котором  поля  new_value  равны  0,  то есть таймер выключен. Не
       используйте это особенность Linux: это непереносимо и нецелесообразно.

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       POSIX.1-2001, SVr4, 4.4BSD (впервые этот вызов появился в 4.2BSD). В POSIX.1-2008  вызовы  getitimer()  и
       setitimer()  помечены  как  устаревшие,  и  вместо  них  рекомендуется использовать программный интерфейс
       таймеров POSIX (timer_gettime(2), timer_settime(2) и т.д.).

ПРИМЕЧАНИЯ

       Срок на таймерах никогда не заканчивается ранее указанного времени, но может  (чуть-чуть)  опоздать,  что
       зависит  от  степени  разрешения  системного  таймера  и  загрузки системы; смотрите time(7) (но смотрите
       ДЕФЕКТЫ далее). Если  время  таймера  истекает  во  время  работы  процесса  (всегда,  если  используется
       ITIMER_VIRTUAL), то сигнал после создания будет доставлен немедленно.

       Потомок,  созданный через fork(2), не наследует таймеры интервалов родителя. При вызове execve(2) таймеры
       интервалов сохраняются.

       В POSIX.1 не определено взаимодействие между setitimer()  и  тремя  интерфейсами:  alarm(2),  sleep(3)  и
       usleep(3).

ОШИБКИ

       Генерирование  и  доставка  сигнала  разделены,  и только один экземпляр каждого сигнала, которые описаны
       выше, может ожидать передачи в процесс. При очень большой нагрузке, ожидание  таймера  ITIMER_REAL  может
       завершиться  раньше  чем  будет  доставлен  сигнал о предыдущем завершении. Второй сигнал об этом событии
       будет потерян.

       Before Linux 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 Linux 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  Linux
       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, 999999].  However, up to and including Linux 2.6.21, Linux does not give an error, but  instead
       silently  adjusts  the  corresponding  seconds  value  for  the  timer.   From  Linux 2.6.22 onward, this
       nonconformance has been repaired: an improper tv_usec value results in an EINVAL error.

СМОТРИТЕ ТАКЖЕ

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

ПЕРЕВОД

       Русский перевод этой страницы  руководства  разработал(и)  Azamat  Hackimov  <azamat.hackimov@gmail.com>,
       Dmitry   Bolkhovskikh   <d20052005@yandex.ru>,   Vladislav   <ivladislavefimov@gmail.com>,   Yuri  Kozlov
       <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                     getitimer(2)