14 static volatile sig_atomic_t stop
;
16 static void sighandler (int signr
)
22 static unsigned long hog (unsigned long niters
)
25 while (!stop
&& --niters
)
35 unsigned long v
[HIST
];
39 it
.it_interval
.tv_sec
= 0;
40 it
.it_interval
.tv_usec
= 1;
41 it
.it_value
.tv_sec
= 0;
42 it
.it_value
.tv_usec
= 1;
44 if (signal (SIGALRM
, &sighandler
)) {
45 err (EXIT_FAILURE
, "failed to set signal handler");
48 if (setitimer (ITIMER_REAL
, &it
, NULL
)) {
49 err (EXIT_FAILURE
, "failed to set interval timer");
53 for (i
= 0; i
< HIST
; ++i
) {
54 v
[i
] = ULONG_MAX
- hog (ULONG_MAX
);
57 for (i
= 0; i
< HIST
; ++i
) {
58 printf ("%d = %ld\n", i
, v
[i
]);
64 if (sigemptyset (&set
)) {
65 err (EXIT_FAILURE
, "failed to empty sigset");
68 if (sigaddset (&set
, SIGALRM
)) {
69 err (EXIT_FAILURE
, "failed to add to sigset");
76 if (sigwait (&set
, &signr
)) {
77 err (EXIT_FAILURE
, "failed to wait for a signal");