Greetings, Hackers. This is my first post to -hackers, so forgive me if I'm asking in the wrong list. I've been writing a little program to wait for a specified length of time, then beep on the terminal and exit. I originally made the process wait the specified number of seconds with a call to sleep(3). Once invoked, the program would sit there, not give any indication that it was running, until the interval had passed and it beeped. So I wrote a cheap little twirling baton routine and stuck it into my program. Obviously, the baton won't twirl if the process is sleep(3)ing, so I delved into the manual and came across the setitimer(2) system call. Setitimer takes three arguments: a #define from time.h specifying whether the timer should run in real time, process virtual time, or on the profiling timer; a pointer to a struct itimerval (which contains two struct timevals) which indicates how long the timer should run for and what to do when it runs out; and a pointer to a struct itimerval to store the old value of the timer before setitimer resets it. When the interval timer expires, it sends the process a SIGALRM, the default action for which is to terminate the process. I rewrote my timer program to use setitimer, defining a signal handler for SIGALRM with signal(3), and it worked as I expected. In this version, the process called setitimer, then pause(3)ed until the process received a signal and invoked the signal handler (which beeped the terminal and exited). I then rewrote the program again to include the twirling baton, and this is where things went awry. The baton is a for loop, which putchars an element of the baton, flushes the stdout, write a backspace, and tests to see if we're at the end of the array which stores the -\|/ of the baton and if so, reset the for loop iterator. After adding the for loop, the interval timer I established with setitimer stopped working. I removed the fflush and the backspace, and couldn't get it to work. I can kill -ALRM the process and make it invoke the signal handler, but the setitimer interval timer isn't sending a SIGALRM. I rewrote the program again to use alarm(3) instead of setitimer, and the program works as expected. I am confused as to why setitimer didn't work in this case, but alarm did. The question is: I would like to know the reason why doesn't setitimer work when I invoke this for loop? If someone knows, or at least can give me a pointer to where I can start looking for the answer, that would be great. Maybe I can add something to the setitimer man page to document this gotcha. I can provide source code, either in the list or on a Web page, if it would help anyone so kind as to answer my question. Cheers, William Richard [EMAIL PROTECTED] To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-hackers" in the body of the message