1 .\" Copyright 7/93 by Darren Senn <sinster@scintilla.santa-clara.ca.us>
2 .\" Based on a similar page Copyright 1992 by Rick Faith
4 .\" %%%LICENSE_START(FREELY_REDISTRIBUTABLE)
5 .\" May be freely distributed
8 .\" Modified Tue Oct 22 00:22:35 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
9 .\" 2005-04-06 mtk, Matthias Lang <matthias@corelatus.se>
10 .\" Noted MAX_SEC_IN_JIFFIES ceiling
12 .\"*******************************************************************
14 .\" This file was generated with po4a. Translate the source file.
16 .\"*******************************************************************
18 .\" Japanese Version Copyright (c) 1997 HANATAKA Shinya
19 .\" all rights reserved.
20 .\" Translated 1997-02-22, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
21 .\" Updated 2005-04-23, Kentaro Shirakata <argrath@ub32.org>
22 .\" Updated 2005-09-11, Kentaro Shirakata <argrath@ub32.org>
23 .\" Updated 2006-07-23, Kentaro Shirakata <argrath@ub32.org>
24 .\" Updated 2007-10-14, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
25 .\" Updated 2009-04-13, Akihiro MOTOKI, LDP v3.20
26 .\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
28 .TH GETITIMER 2 2014\-07\-08 Linux "Linux Programmer's Manual"
30 getitimer, setitimer \- インターバル・タイマーの値を取得または設定する
33 \fB#include <sys/time.h>\fP
35 \fBint getitimer(int \fP\fIwhich\fP\fB, struct itimerval *\fP\fIcurr_value\fP\fB);\fP
37 \fBint setitimer(int \fP\fIwhich\fP\fB, const struct itimerval *\fP\fInew_value\fP\fB,\fP
38 \fB struct itimerval *\fP\fIold_value\fP\fB);\fP
41 システムは 1 個のプロセスにつき 3 個のインターバル・タイマーを提供する。 それぞれのタイマーは別々の時間領域で減少する。
42 あるタイマーが満了すると、 プロセスにシグナルが送られ、 タイマーは (0 でなければ) 指定されたインターバルに再設定される。
45 実時間 (real time) で減少し、満了すると \fBSIGALRM\fP が送られる。
48 プロセスが実行されている間のみ減少し、満了すると \fBSIGVTALRM\fP が送られる。
51 プロセスが実行されていて、 かつシステムがそのプロセスのために処理を行なっている間に減少する。 多くの場合、このタイマーは
52 \fBITIMER_VIRTUAL\fP と組み合わされて、アプリケーションがカーネル空間とユーザー空間で
53 どれだけの時間を過ごしたかをプロファイルするのに使用される。 満了すると \fBSIGPROF\fP が送られる。
55 タイマーの値は以下の構造体によって定義される:
61 struct timeval it_interval; /* Interval for periodic timer */
62 struct timeval it_value; /* Time until next expiration */
66 time_t tv_sec; /* seconds */
67 suseconds_t tv_usec; /* microseconds */
73 \fBgetitimer\fP() 関数は、 \fIwhich\fP で指定されたタイマー (\fBITIMER_REAL\fP, \fBITIMER_VIRTUAL\fP,
74 \fBITIMER_PROF\fP のどれか) の現在の値 (すなわち、次のタイマー満了までの残り時間) を、 \fIcurr_value\fP
75 で指定された構造体に格納する。 \fIit_value\fP フィールドのサブフィールドにはタイマーの残り時間が設定される。 タイマーが無効になっている場合は
76 ゼロが設定される。 \fIit_interval\fP フィールドにはタイマーのインターバル (期間) が設定される。 \fIit_interval\fP
77 (の両方のサブフィールド) で値 0 が返された場合は、 このタイマーが 1 回限りのタイマーであることを示している。
79 \fBsetitimer\fP() 関数は指定されたタイマーに \fInew_value\fP の値を設定する。 \fIold_value\fP が NULL
80 以外の場合、タイマーの古い値 (すなわち \fBgetitimer\fP() で返されるのと同じ情報) が \fIold_value\fP に格納される。
82 タイマーは \fIit_value\fP からゼロへ向けて減っていき、シグナルを生成し、 \fIit_interval\fP に初期化される。
83 タイマーがゼロに設定された場合 (\fIit_value\fP がゼロか、タイマーが満了した時に \fIit_interval\fP がゼロの場合) は停止する。
85 タイマーの期間は \fItv_sec\fP と \fItv_usec\fP の両方により決定される。
87 要求した時間がくる前にタイマーが満了することはないが、 逆にある (短い) 時間だけ満了が遅れることはある。
88 どれだけ遅れるかはシステムの時間分解能とシステムの負荷に依存する (\fBtime\fP(7) 参照; 但し、バグの項も参照のこと)。
89 タイマーが満了するとシグナルが生成され、タイマーは初期化される。 プロセスがアクティブな時 (\fBITIMER_VIRTUAL\fP
90 の場合には常にそうである) にタイマーが満了した場合、生成されたシグナルは すぐに配送される。それ以外の場合は、システムの負荷により少しの時間だけ
93 成功した場合、0 が返される。エラーが発生した場合、\-1 が返され、 \fIerrno\fP が適切に設定される。
97 \fInew_value\fP, \fIold_value\fP, \fIcurr_value\fP が有効なポインタではない。
100 \fIwhich\fP が \fBITIMER_REAL\fP, \fBITIMER_VIRTUAL\fP, \fBITIMER_PROF\fP のどれでもない。 または
101 (Linux 2.6.22 以降で) \fInew_value\fP で指定された構造体の \fItv_usec\fP フィールドの一つが 0 以上 999999
104 POSIX.1\-2001, SVr4, 4.4BSD (このコールは 4.2BSD で始めて現われた). POSIX.1\-2008 では、
105 \fBgetitimer\fP() と \fBsetitimer\fP() は廃止予定とされており、 代わりに POSIX タイマー API
106 (\fBtimer_gettime\fP(2), \fBtimer_settime\fP(2) など) を使うことが推奨されている。
108 \fBfork\fP(2) で作成された子プロセスは、 親プロセスのインターバル・タイマーを継承しない。 \fBexecve\fP(2)
109 の前後ではインターバル・タイマーは保存される。
111 POSIX.1 では、 \fBsetitimer\fP() と、 \fBalarm\fP(2), \fBsleep\fP(3), \fBusleep\fP(3) という 3
112 つのインタフェースとの相互の影響については規定していない。
114 標準では、次の呼び出しの意味については規定されていない。
116 setitimer(which, NULL, &old_value);
118 (Solaris, BSD 系やおそらく他のシステムもそうだが) 多くのシステムでは、この呼び出しは以下と等価である。
120 getitimer(which, &old_value);
122 Linux では、この呼び出しは \fInew_value\fP フィールドが 0 の呼び出しと等価なものと扱われる。 つまり、タイマーが無効になる。
123 \fILinux のこの間違った機能を使用しないこと\fP。移植性もなく、不必要な機能である。
125 シグナルの生成と配送は別個のものであり、 前述のシグナルのそれぞれについて一つだけがプロセスのために 待機する。 非常に重い負荷の下では、
126 \fBITIMER_REAL\fP タイマーでは、時間切れにより生成された一つ前のシグナルが配送される前に、 次の時間切れが起こる場合がある。
127 そのような場合、 2 個めのイベントに対するシグナルは失われてしまう。
129 バージョン 2.6.16 より前の Linux カーネルでは、 タイマーの値は jiffy で表現される。 要求が jiffy 表現で
130 (\fIinclude/linux/jiffies.h\fP で定義されている) \fBMAX_SEC_IN_JIFFIES\fP
131 を越える値をタイマーに設定しようとするものの場合、 タイマーは暗黙にこの上限値に切り詰められる。 Linux/i386 の場合 (Linux
132 2.6.13 以降では jiffy は 0.004 秒) の場合、 これはタイマーの上限値がおよそ 99.42 日になることを意味する。 Linux
133 2.6.16 以降では、カーネルは時間に関する内部表現として 異なる表現を使うようになっており、この上限はなくなった。
135 .\" 4 Jul 2005: It looks like this bug may remain in 2.4.x.
136 .\" http://lkml.org/lkml/2005/7/1/165
137 (i386 を含む) いくつかのシステムでは、 バージョン 2.6.12 以前の Linux カーネルは ある種の状況では 1 jiffy
138 早くタイマーが終了してしまうというバグがあった。 このバグはカーネル 2.6.12 で修正された。
140 .\" Bugzilla report 25 Apr 2006:
141 .\" http://bugzilla.kernel.org/show_bug.cgi?id=6443
142 .\" "setitimer() should reject noncanonical arguments"
143 POSIX.1\-2001 では \fBsetitimer\fP() は \fItv_usec\fP の値が 0 から 999999
144 の範囲外である場合には失敗するべきだとしている。 しかし、2.6.21 以前のカーネルの Linux ではエラーにならず、
145 対応する秒数の分だけそのタイマーの秒の値が暗黙に調整される。 カーネル 2.6.22 以降では、この標準非準拠の動作は修正され、 \fItv_usec\fP
146 の値が不適切な場合には \fBEINVAL\fP エラーとなる。
148 \fBgettimeofday\fP(2), \fBsigaction\fP(2), \fBsignal\fP(2), \fBtimer_create\fP(2),
149 \fBtimerfd_create\fP(2), \fBtime\fP(7)
151 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部である。
152 プロジェクトの説明とバグ報告に関する情報は \%http://www.kernel.org/doc/man\-pages/ に書かれている。