Well, at least a mystery to me. Consider the following:
import time
import signal
def catcher(signum, _):
print "beat!"
signal.signal(signal.SIGALRM, catcher)
signal.setitimer(signal.ITIMER_REAL, 2, 2)
while True:
time.sleep(5)
Works as expected i.e. delivers a "beat!" message every 2 seconds. Next, no output is produced:
import time
import signal
def catcher(signum, _):
print "beat!"
signal.signal(signal.SIGVTALRM, catcher)
signal.setitimer(signal.ITIMER_VIRTUAL, 2, 2)
while True:
time.sleep(5)
Where is the issue?
The
signal.ITIMER_VIRTUAL
only counts down with the process is running.time.sleep(5)
suspends the process so the timer doesn't decrement.From my system's man setitimer (emphasis mine):
Did you just miss that your process isn't executing while sleeping? It's going to take an awfully long time for you to accrue actually-used time with that loop.