名 前
restart_syscall − 一 時 停 止 シ グ ナ ル に よ る 割 り 込 み 後 に シ ス テ ム コ ー ル を 再 開 す る
書 式
int restart_syscall(void); 注 : こ の シ ス テ ム コ ー ル に は 、 glibc の ラ ッ パ ー 関 数 は な い 。 「 注 意 」 の 節 を 参 照 。
説 明
restart_syscall() シ ス テ ム コ ー ル は 、 シ グ ナ ル (SIGSTOP や SIGTSTP な ど ) に よ っ て 停 止 さ れ た プ ロ セ ス が SIGCONT シ グ ナ ル を 受 信 し て 再 開 さ れ た 後 に 、 特 定 の シ ス テ ム コ ー ル を 再 開 す る の に 使 用 さ れ る 。 こ の シ ス テ ム コ ー ル は カ ー ネ ル 内 部 で の 利 用 の み を 想 定 し て い る 。
restart_syscall() は 、 再 開 時 に 時 刻 関 連 の パ ラ メ ー タ ー を 調 整 す る 必 要 が あ る シ ス テ ム コ ー ル を 再 開 さ せ る 場 合 に の み 使 用 さ れ る 。 概 要 す る シ ス テ ム コ ー ル は poll(2) (Linux 2.6.24 以 降 )、 nanosleep(2) (Linux 2.6 以 降 )、 clock_nanosleep(2) (Linux 2.6 以 降 )、 FUTEX_WAIT (Linux 2.6.22 以 降 ) や FUTEX_WAIT_BITSET (Linux 2.6.31 以 降 ) 操 作 を 利 用 し た 場 合 の futex(2) で あ る 。 restart_syscall() は 、 中 断 さ れ た シ ス テ ム コ ー ル を 、 経 過 し た 時 間 (プ ロ セ ス が シ グ ナ ル に よ り 停 止 さ れ て い た 時 間 も 含 む ) を 考 慮 に 入 れ て 適 切 に 調 整 し た 時 刻 引 き 数 で 再 開 す る 。 restart_syscall() の 仕 組 み が な い と 、 こ れ ら の シ ス テ ム コ ー ル の 再 開 で 、 プ ロ セ ス が 実 行 を 継 続 す る 際 に す で に 経 過 し た 時 間 を 正 し く 減 算 で き な い 。
返 り 値
restart_syscall() の 返 り 値 は 、 再 開 中 の シ ス テ ム コ ー ル の 返 り 値 と な る 。
エ ラ ー
errno は restart_syscall() が 再 開 し て い る シ ス テ ム コ ー ル の エ ラ ー に 基 づ い て 設 定 さ れ る 。
バ ー ジ ョ ン
restart_syscall() シ ス テ ム コ ー ル は Linux 2.6 以 降 に 存 在 す る 。
準 拠
こ の シ ス テ ム コ ー ル は Linux 固 有 で あ る 。
注 意
こ の シ ス テ ム コ ー ル に は glibc の ラ ッ パ ー 関 数 は な い 。 そ れ は カ ー ネ ル に よ る 利 用 だ け が 想 定 さ れ て お り 、 ア プ リ ケ ー シ ョ ン は 決 し て こ の シ ス テ ム コ ー ル を 呼 び 出 す べ き で は な い 。 カ ー ネ ル は restart_syscall() を 使 用 す る こ と で 、 シ グ ナ ル に よ り 停 止 さ れ た プ ロ セ ス が SIGCONT に よ り 再 開 さ れ た 後 に シ ス テ ム コ ー ル が 再 開 さ れ る 際 に 、 元 の シ ス テ ム コ ー ル に 指 定 さ れ た タ イ ム ア ウ ト 時 間 の 計 算 に 、 プ ロ セ ス が 停 止 中 に 経 過 し た 時 間 が 含 ま れ る こ と を 保 証 す る 。 タ イ ム ア ウ ト 引 き 数 を 取 り 、 停 止 シ グ ナ ル の 後 に SIGCONT が あ っ た 場 合 自 動 的 に 再 開 す る シ ス テ ム コ ー ル だ が 、 そ の シ ス テ ム コ ー ル に restart_syscall() の 仕 組 み が 組 込 ま れ て い な い 場 合 に は 、 プ ロ セ ス の 実 行 が 再 開 さ れ た 後 、 停 止 中 に プ ロ セ ス が 消 費 し た 時 間 は タ イ ム ア ウ ト 値 と し て カ ウ ン ト 「 さ れ な い 」 。 こ の 問 題 を 持 つ 有 名 な シ ス テ ム コ ー ル と し て は ppoll(2), select(2), pselect(2) が あ る 。 ユ ー ザ ー 空 間 か ら は restart_syscall() の 動 作 は ほ と ん ど 見 え な い 。 再 開 さ れ た シ ス テ ム コ ー ル を 呼 び 出 し た プ ロ セ ス に は 、 そ の シ ス テ ム コ ー ル が 通 常 通 り 実 行 さ れ 返 っ た よ う に 見 え る 。
関 連 項 目
sigaction(2), sigreturn(2), signal(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。