0xfee1dead

by SATO Yusuke (http://binary.nahi.to)
Nov 26
Permalink
ITIMER_VIRTUAL counts CPU time. When your process is sleeping, it’s not using CPU time, so the timer doesn’t run, and won’t expire.

setitimer and nanosleep issue.

元質問は、「nanosleepで寝てると、いつまで待ってもsetitimer(ITIMER_VIRTUAL)が発火しないんだけど?(SIGVTALRMが飛んでこないんだけど?)」というもの。引用部分が答え。ITIMER_PROFのSIGPROFならともかく、VIRTUALならシグナルされそうだと思ってしまいがちなので注意(さっきうっかり同じ疑問を抱いた)。カーネル内で仕事をしているならVIRTUALなシグナルは飛んでくるが、カーネル内で寝ている(CPUを使っていない)と飛んでこない。カウントされない。