getitimer(2) - wariua/manpages-ko GitHub Wiki
getitimer, setitimer - κ°κ²© νμ΄λ¨Έ κ° μ»κ±°λ μ€μ νκΈ°
#include <sys/time.h>
int getitimer(int which, struct itimerval *curr_value);
int setitimer(int which, const struct itimerval *new_value,
struct itimerval *old_value);
μ΄ μμ€ν νΈμΆλ€μ κ°κ²© νμ΄λ¨Έ, μ¦ λ―Έλ μ΄λ μμ μ μ΅μ΄ λ§λ£λκ³ (μ νμ μΌλ‘) μ΄ν μ£ΌκΈ°μ κ°κ²©μΌλ‘ λ§λ£λλ νμ΄λ¨Έλ€μ μ¬μ©ν μ μκ² ν΄ μ€λ€. νμ΄λ¨Έκ° λ§λ£λ λ νΈμΆ νλ‘μΈμ€μ μκ·Έλμ΄ μμ±λκ³ (κ°κ²©μ΄ 0μ΄ μλλ©΄) νμ΄λ¨Έκ° μ§μ κ°κ²©μΌλ‘ μ¬μ€μ λλ€.
μΈ κ°μ§ μ’
λ₯μ νμ΄λ¨Έκ° μμ΄μ which
μΈμλ₯Ό ν΅ν΄ μ§μ νλ€. κ°κ°μ μλ‘ λ€λ₯Έ ν΄λμ λν΄ κ³μ°μ νλ©° νμ΄λ¨Έ λ§λ£ μ λ€λ₯Έ μκ·Έλμ μμ±νλ€.
ITIMER_REAL
-
μ€μ μκ°(μ¦ λ²½μκ³ μκ°)μΌλ‘ νμ΄λ¨Έλ₯Ό μΉ΄μ΄νΈλ€μ΄ νλ€. λ§λ£ λλ§λ€
SIGALRM
μκ·Έλμ΄ μμ±λλ€. ITIMER_VIRTUAL
-
νλ‘μΈμ€κ° μλͺ¨ν μ¬μ©μ λͺ¨λ CPU μκ°μ λν΄ νμ΄λ¨Έλ₯Ό μΉ΄μ΄νΈλ€μ΄ νλ€. (νλ‘μΈμ€ λ΄μ λͺ¨λ μ€λ λλ€μ΄ μλͺ¨ν CPU μκ°μ΄ μΈ‘μ μ ν¬ν¨λλ€.) λ§λ£ λλ§λ€
SIGVTALRM
μκ·Έλμ΄ μμ±λλ€. ITIMER_PROF
-
νλ‘μΈμ€κ° μλͺ¨ν CPU μκ°(μ¦ μ¬μ©μ μκ°κ³Ό μμ€ν μκ° λͺ¨λ)μ λν΄ νμ΄λ¨Έλ₯Ό μΉ΄μ΄νΈλ€μ΄ νλ€. (νλ‘μΈμ€ λ΄μ λͺ¨λ μ€λ λλ€μ΄ μλͺ¨ν CPU μκ°μ΄ μΈ‘μ μ ν¬ν¨λλ€.) λ§λ£ λλ§λ€
SIGPROF
μκ·Έλμ΄ μμ±λλ€.μ΄ νμ΄λ¨Έλ₯Ό
ITIMER_VIRTUAL
κ³Ό ν¨κ» μ¬μ©νμ¬ νλ‘μΈμ€κ° μλͺ¨ν μ¬μ©μ λ° μμ€ν CPU μκ°μ νλ‘νμΌ ν μ μλ€.
νλ‘μΈμ€λ μΈ κ°μ§ νμ΄λ¨Έ μ’ λ₯λ³λ‘ νλμ©μ κ°μ§κ³ μλ€.
λ€μ ꡬ쑰체λ€λ‘ νμ΄λ¨Έ κ°μ μ§μ νλ€.
struct itimerval {
struct timeval it_interval; /* μ£ΌκΈ° νμ΄λ¨Έμ κ°κ²© */
struct timeval it_value; /* λ€μ λ§λ£κΉμ§μ μκ° */
};
struct timeval {
time_t tv_sec; /* μ΄ */
suseconds_t tv_usec; /* λ§μ΄ν¬λ‘μ΄ */
};
getitimer()
ν¨μλ which
λ‘ μ§μ ν νμ΄λ¨Έμ νμ¬ κ°μ curr_value
κ° κ°λ¦¬ν€λ λ²νΌμ λ£λλ€.
it_value
νμ ꡬ쑰체μλ μ§μ ν νμ΄λ¨Έμ λ€μ λ§λ£ λκΉμ§ λ¨μ μκ°μ΄ μ±μμ§λ€. μ΄ κ°μ νμ΄λ¨Έκ° μΉ΄μ΄νΈλ€μ΄ νλ©΄μ λ°λκ² λλ©° νμ΄λ¨Έκ° λ§λ£λ λ it_interval
λ‘ μ¬μ€μ λλ€. it_value
μ λ νλκ° λͺ¨λ 0μ΄λ©΄ μ΄ νμ΄λ¨Έλ νμ¬ ν΄μ λ (λΉνμ±) μνμ΄λ€.
it_interval
νμ ꡬ쑰체μλ νμ΄λ¨Έ κ°κ²©μ΄ μ±μμ§λ€. it_interval
μ λ νλκ° λͺ¨λ 0μ΄λ©΄ μ΄ νμ΄λ¨Έλ λ¨λ°μ±μ΄λ€. (μ¦, ν λ²λ§ λ§λ£λλ€.)
setitimer()
ν¨μλ new_value
λ‘ μ§μ ν κ°μΌλ‘ νμ΄λ¨Έλ₯Ό μ€μ νμ¬ which
λ‘ μ§μ ν νμ΄λ¨Έλ₯Ό μ₯μ νκ±°λ ν΄μ νλ€. old_value
κ° NULLμ΄ μλλ©΄ κ·Έ λ²νΌλ₯Ό μ΄μ©ν΄ νμ΄λ¨Έμ μ΄μ κ°μ (μ¦, getitimer()
κ° λ°ννλ κ²κ³Ό κ°μ μ 보λ₯Ό) λ°ννλ€.
new_value.it_value
μ μ΄λ ν νλλΌλ 0μ΄ μλλ©΄ κ·Έ μ§μ μκ°μ μ΅μ΄ λ§λ£λλλ‘ νμ΄λ¨Έλ₯Ό μ₯μ νλ€. new_value.it_value
μ λ νλκ° λͺ¨λ 0μ΄λ©΄ νμ΄λ¨Έλ₯Ό ν΄μ νλ€.
new_value.it_interval
νλκ° νμ΄λ¨Έμ μ κ°κ²©μ μ§μ νλ€. κ·Έ νμ νλκ° λ λͺ¨λ 0μ΄λ©΄ νμ΄λ¨Έκ° λ¨λ°μ±μ΄λ€.
μ±κ³΅ μ 0μ λ°ννλ€. μ€λ₯ μ -1μ λ°ννλ©° errno
λ₯Ό μ μ ν μ€μ νλ€.
EFAULT
-
new_value
λold_value
,curr_value
κ° μ ν¨ν ν¬μΈν°κ° μλλ€. EINVAL
-
which
κ°ITIMER_REAL
,ITIMER_VIRTUAL
,ITIMER_PROF
μ€ νλκ° μλλ€. λλ (리λ μ€ 2.6.22λΆν°)new_value
κ° κ°λ¦¬ν€λ ꡬ쑰체 λ΄μ νtv_usec
νλκ° 0μμ 999999κΉμ§ λ²μ λ°μ κ°μ λ΄κ³ μλ€.
POSIX.1-2001, SVr4, 4.4BSD (4.2BSDμμ μ΄ νΈμΆμ΄ μ²μ λ±μ₯). POSIX.1-2008μμλ getitimer()
μ setitimer()
λ₯Ό ꡬμμΌλ‘ νμνκ³ λμ POSIX νμ΄λ¨Έ API(timer_gettime(2), timer_settime(2) λ±) μ¬μ©μ κΆμ₯νλ€.
νμ΄λ¨Έλ μμ² μκ° μ μλ μ λ λ§λ£λμ§ μμ§λ§ μμ€ν
νμ΄λ¨Έ ν΄μλμ μμ€ν
λΆνμ λ°λΌμ μ½κ°μ (μ§§μ) μκ° νμ λ§λ£λ μλ μλ€. time(7) μ°Έκ³ . (νμ§λ§ μλ BUGSλ₯Ό 보λΌ.) νλ‘μΈμ€κ° νλ μ€μΈ λμ νμ΄λ¨Έκ° λ§λ£λλ©΄ (ITIMER_VIRTUAL
μμλ νμ μ°Έμ΄λ€) μκ·Έλμ΄ μμ± μ¦μ μ λ¬λ κ²μ΄λ€.
fork(2)λ‘ μμ±ν μμμ΄ λΆλͺ¨μ κ°κ²© νμ΄λ¨Έλ€μ λ¬Όλ €λ°μ§ μλλ€. execve(2)λ₯Ό κ±°μΉ λ κ°κ²© νμ΄λ¨Έλ€μ΄ μ μ§λλ€.
POSIX.1μμλ setitimer()
μ μΈ κ°μ§ μΈν°νμ΄μ€ alarm(2), sleep(3), usleep(3)κ³Όμ μνΈμμ©μ λͺ
μΈνμ§ μκ³ λ¨κ²¨λμλ€.
νμ€λ€μμ λ€μ νΈμΆμ μλ―Έμ λν΄ μΈκΈνμ§ μκ³ μλ€.
setitimer(which, NULL, &old_value);
λλΆλΆμ (μλΌλ¦¬μ€, BSD, κ·Έλ¦¬κ³ μλ§ λ€λ₯Έ) μμ€ν λ€μμλ μ΄λ₯Ό λ€μκ³Ό λλ±νκ² λ€λ£¬λ€.
getitimer(which, &old_value);
리λ
μ€μμλ μ΄λ₯Ό new_value
μ νλλ€μ΄ 0μΈ νΈμΆκ³Ό λλ±νκ² λ€λ£¬λ€. μ¦, νμ΄λ¨Έκ° λΉνμ±νλλ€. 리λ
μ€μ μ΄ λΉκΈ°λ₯μ μ΄μ©ν΄μλ μ λλ€. μ΄μμ±μ΄ μμΌλ©° νμν κ²λ μλλ€.
μκ·Έλμ μμ±κ³Ό μ λ¬μ μλ‘ λ³κ°μ΄λ©° νλ‘μΈμ€λ³λ‘ μμ λμ΄λ μκ·Έλλ€λ§λ€ ν μΈμ€ν΄μ€λ§ λ―Έμ²λ¦¬ μνμΌ μ μλ€. μμ£Ό λμ λΆνμμλ μμ λ§λ£μμμ μκ·Έλμ΄ μ λ¬λκΈ° μ μ ITIMER_REAL
νμ΄λ¨Έκ° λ€μ λ§λ£λ μλ μλ€. κ·Έλ° κ²½μ° λ λ²μ§Έ μκ·Έλμ μ μ€λκ² λλ€.
리λ
μ€ μ»€λ 2.6.16 μ μμλ νμ΄λ¨Έ κ°λ€μ μ§νΌλ‘ νννλ€. μ§νΌλ‘ νννλ©΄ (include/linux/jiffies.h
μ μ μλ) MAX_SEC_IN_JIFFIES
λ₯Ό μ΄κ³Όνλ κ°μΌλ‘ νμ΄λ¨Έλ₯Ό μ€μ νλλ‘ μμ²νλ©΄ μ‘°μ©νκ² νμ΄λ¨Έλ₯Ό κ·Έ μν κ°μΌλ‘ μλΌλΈλ€. (리λ
μ€ 2.6.13λΆν° κΈ°λ³Έ μ§νΌκ° 0.004μ΄μΈ) 리λ
μ€/i386μμλΌλ©΄ νμ΄λ¨Έμ μνκ°μ΄ μ½ 99.42μΌμ΄λΌλ λ»μ΄λ€. 리λ
μ€ 2.6.16λΆν°λ 컀λμμ μκ°μ λν΄ λ€λ₯Έ λ΄λΆ ννμ μ¬μ©νλ―λ‘ μ΄λ° μνμ΄ μλ€.
νΉμ μμ€ν λ€(i386 ν¬ν¨)μμ λ²μ 2.6.12 μ μ 리λ μ€ μ»€λμλ μΌλΆ μν©μμ ν μ§νΌκΉμ§ μ΄λ₯΄κ² νμ΄λ¨Έ λ§λ£κ° μΌμ΄λλ λ²κ·Έκ° μλ€. 컀λ 2.6.12μμ μ΄ λ²κ·Έκ° μμ λμλ€.
POSIX.1-2001μμλ tv_usec
κ°μ 0μμ 999999κΉμ§ λ²μλ₯Ό λ²μ΄λκ² μ§μ ν κ²½μ° setitimer()
κ° μ€ν¨ν΄μΌ νλ€κ³ νλ€. νμ§λ§ 2.6.21κΉμ§ 컀λμμ 리λ
μ€λ μ€λ₯λ₯Ό μ£Όμ§ μκ³ κ·Έ λμ μ‘°μ©νκ² νμ΄λ¨Έμ λμνλ μ΄ κ°μ μ‘°μ νλ€. 컀λ 2.6.22λΆν°λ μ΄λ° λΉμ€μ μ¬νμ΄ κ³ μ³μ Έμ μλͺ»λ tv_usec
κ°μ΄ EINVAL
μ€λ₯λ₯Ό μ λ°νλ€.
gettimeofday(2), sigaction(2), signal(2), timer_create(2), timerfd_create(2), time(7)
2017-09-15