SIGVTALRM
SIGVTALRM — сигнал на POSIX-сумісних платформах, який посилається в процесу при вичерпанні віртуального таймера. Символьна змінна SIGVTALRM оголошена у заголовному файлі signal.h
. Символьні імена для процесів використовуються через те, що їхні номери залежать від конкретної платформи.
Опис | Вичерпання віртуального таймера (може бути перехопленим або проігнорованим) |
---|---|
Дія за замовчуванням | Завершує процес |
SA_SIGINFO macros | |
None |
Етимологія
SIG є загальноприйнятий префіксом для назв сигналів. VT (англ. virtual) — віртуальний, ALRM (англ. alarm) — тривога, сигнал будильника.
Використання
Віртуальний інтервальний таймер може бути встновлений через системний виклик setitimer().
Віртуальний інтервальний таймер виконує відлік часу лише тоді, коли процес є активним. На відміну від нього (невіртуальний) інтервальний таймер, виконує відлік реального часу. Це значить, що на процесі, який знаходиться в стані очікування (спить), віртуальний інтервальний таймер буде зупиненим.
Приклад
Програма мовою C, яка активує обробник віртуального таймера через 2 секунди від початку своєї роботи і надалі — через кожні 0.25 секунди:
#include <stdio.h>
#include <signal.h>
#include <sys/time.h>
void alarm_handler(int sig)
{
printf("vt alarm! %d\n", sig);
}
int main(int argc, char *argv[])
{
signal(SIGVTALRM, alarm_handler); /* встановлюємо обробник */
struct itimerval timer;
timer.it_value.tv_sec = 2;
timer.it_value.tv_usec = 0;
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 250000;
setitimer(ITIMER_VIRTUAL, &timer, NULL);
while(1);
// getc(stdin);
return 0;
}
Якщо нескінчений цикл (while(1);
) замінити на введення зі стандартного пристрою з очікуванням (getc(stdin);
), то віртуальний інтервальний таймер не спрацює через те, що процес буде перебувати в стані очікування вводу (тобто — процес буде неактивним).