[완료]linux setitimer 질문!
글쓴이: mauver / 작성시간: 수, 2012/05/02 - 8:11오후
setitimer 를 예제로 하고 있습니다.
의문점이 있는데
timer를 ITIMER_VIRTUAL 로 할 경우에는 프로세스가 실행중인 경우에만 시간을 젠다고 해야하나요?
프로세스 동작시간을 쟤고 싶은데 itimerval 구조체에서
interval.tv_sec = 1
interval.tv_usec = 0
it_value.tv_sec = 1
it_value.tv_usec = 0
으로 설정하고 1초마다 타이머가 만료될 경우에는 count 값을 올리도록 하였는데
방법이 잘못되었는지.. 한참있다가 타이머가 한번씩 만료되었다고 나옵니다.
프로세스는 while(1) 으로 계속 돌려 놓았는데, 동작시간이 저렇게 가끔가끔 나오는게 이해가 잘 안가네요.
조언 부탁드립니다. 아래는 전체 소스 입니다.
#include <stdio.h> #include <sys/time.h> #include <signal.h> void timer_handler(int signum) { static int count = 0; printf("expired %d\n", ++count); } int main() { struct sigaction sa; struct itimerval timer; memset(&sa, 0, sizeof(sa)); sa.sa_handler = &timer_handler; sigaction(SIGVTALRM, &sa, NULL); timer.it_interval.tv_sec = 1; timer.it_interval.tv_usec = 0; timer.it_value.tv_sec = 1; timer.it_value.tv_usec = 0; setitimer(ITIMER_VIRTUAL, &timer, NULL); while(1); }
Forums:
$ ./a.out expired 1 expired
$ ./a.out
expired 1
expired 2
expired 3
expired 4
expired 5
expired 6
expired 7
expired 8
expired 9
expired 10
$ uname -a
Linux -OEM 3.0.0-19-generic #33-Ubuntu SMP Thu Apr 19 19:05:57 UTC 2012 i686 i686 i386 GNU/Linux
$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6.1/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.1-9ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++,go --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)
제 환경에서는 무리없이 잘 되네요. ^^
감사합니다.
virtual 도 바로바로 1초마다 뜨나요?
신기하네요. ssh 로 연결해서 다른 컴퓨터에 돌려서 뭔가 문제가 있었나보네요~^^. 도움 감사드립니다.
댓글 달기