|
HOME > Linux Tips ( 目次 ) > Linux コマンド 一覧表 > n > nanosleep - システムコールの説明 nanosleep - システムコールの説明 - Linux コマンド集 一覧表名前nanosleep - 指定された時間の間、実行を停止する 書式
#define _POSIX_C_SOURCE 199309
#include <time.h>
説明
nanosleep
()は、少なくとも
*req
で指定された時間の間、プログラムの実行を遅延させる。
プロセスにシグナルが配送された場合には、
指定された時間に達しなくても返ることがある。
この場合は -1 を返し、errno
に
EINTR
を設定し、さらに
rem
が NULL でなければ
rem
が指している構造体に残りの時間を格納する。
*rem
の値を使うと、
nanosleep
()をもう一度呼び出して、指定した時間の停止を
完了させることができる。
time_t tv_sec; /* 秒 */
long tv_nsec; /* ナノ秒 */
};
ナノ秒のフィールドの値は 0 から 999999999 の範囲になければならない。
返り値要求された期間の停止に成功した場合、 nanosleep ()は 0 を返す。呼び出しがシグナルハンドラにより割り込まれたり、 エラーが発生した場合は、-1 を返し、 errno にエラー内容を示す値を設定する。 エラー
バグ現在の nanosleep ()の実装は普通のカーネルのタイマ機構に基づいている。カーネルのタイマ機構は 1/HZ 秒の分解能をもっている ( time (7)参照)。このため、 nanosleep ()は少なくとも指定された時間必ず停止するが、プロセスが再び実行できる ようになるまでに指定された時間より最大 10 ms 余計にかかる。同じ理由で、 シグナルが配送された場合に *rem に入れて返される値は、通常 実際の値より小さくない最小の 1/HZ 秒の倍数に切り上げられる。 以前の動作(例えば、時間が重要な意味を持つハードウェアを制御する場合など) より正確な停止を必要とするアプリケーションに対応するために、 nanosleep ()は、マイクロ秒精度のビジー・ウェイトを利用することで、 2ms 以下の停止を行うことができた。 但し、この機能を利用するには、呼び出し元のプロセスが SCHED_FIFO や SCHED_RR といったリアルタイム・ポリシーの元でスケジューリングされている 必要があった。 この特別な拡張はカーネル 2.5.39 で削除された。したがって、 現在の 2.4 系列のカーネルにはこの機能が存在するが、 2.6系列のカーネルにはない。 Linux 2.4 では、 nanosleep ()が (SIGTSTP などの) シグナルにより停止された場合、 nanosleep ()の呼び出しは SIGCONT シグナルによるプロセスの再開後に EINTR エラーで失敗する。 システムコールがこの後で再スタートされた場合、 プロセスが停止状態にある間に経過した時間は 停止期間としてカウント「されない」。 準拠POSIX.1-2001. 関連項目
sched_setscheduler
(2),
timer_create
(2),
sleep
(3),
usleep
(3)
|
|