#include #include #include #include #include #include #include #include int loop = 1; static void handler(int sig, siginfo_t *si, void *unused) { printf("Got SIGALRM at address: 0x%lx\n", (long) si->si_addr); loop = 0; } int main(int argc, char **argv) { struct sigaction sa; sa.sa_flags = SA_SIGINFO; sigemptyset(&sa.sa_mask); sa.sa_sigaction = handler; sigaction(SIGALRM, &sa, NULL); struct itimerval new_value, old_value; new_value.it_interval.tv_sec = 0; new_value.it_interval.tv_usec = 0; new_value.it_value.tv_sec = 0; new_value.it_value.tv_usec = 1000; setitimer(ITIMER_REAL, &new_value, &old_value); while (loop) ; printf("Loop is complete\n"); int ret = getitimer(ITIMER_REAL, &old_value); printf("%d %ld %ld %ld %ld\n", ret, old_value.it_interval.tv_sec, old_value.it_interval.tv_usec, old_value.it_value.tv_sec, old_value.it_value.tv_usec ); return 0; }