Manpages

名 前

sigreturn − シ グ ナ ル ハ ン ド ラ ー か ら 返 り 、 ス タ ッ ク を 掃 除 す る

書 式

int sigreturn(...);

説 明

Linux カ ー ネ ル が プ ロ セ ス に 対 し て ブ ロ ッ ク さ れ て い な い シ グ ナ ル が 処 理 待 ち と 判 定 し た 場 合 、 そ の プ ロ セ ス の 次 回 の ユ ー ザ ー モ ー ド へ の 遷 移 (す な わ ち 、 シ ス テ ム コ ー ル か ら の リ タ ー ン 時 や そ の プ ロ セ ス が CPU に 再 ス ケ ジ ュ ー ル さ れ る 際 )、 カ ー ネ ル は プ ロ セ ス コ ン テ キ ス ト の 種 々 の 値 (プ ロ セ ッ サ ー の ス テ ー タ ス ワ ー ド 、 レ ジ ス タ ー 、 シ グ ナ ル マ ス ク 、 シ グ ナ ル ス タ ッ ク 設 定 ) を ユ ー ザ ー 空 間 の ス タ ッ ク に 保 存 す る 。 ま た 、 カ ー ネ ル は 、 ユ ー ザ ー モ ー ド へ の 遷 移 時 に シ グ ナ ル ハ ン ド ラ ー が 呼 び 出 さ れ 、 ハ ン ド ラ ー か ら の リ タ ー ン 時 に 、 制 御 が "signal trampoline" と 呼 ば れ る ユ ー ザ ー 空 間 コ ー ド ブ ロ ッ ク に 渡 さ れ る よ う に 、 準 備 を 行 う 。 signal trampoline の コ ー ド が sigreturn() を 呼 び 出 す 。

sigreturn() は 、 シ グ ナ ル ハ ン ド ラ ー を 起 動 す る た め に 行 っ た こ と の 全 て — プ ロ セ ス の シ グ ナ ル マ ス ク の 変 更 、 シ グ ナ ル ス タ ッ ク の 切 り 替 え (sigaltstack(2) 参 照 ) — の 取 り 消 し を 行 う 。 プ ロ セ ス の シ グ ナ ル マ ス ク の 復 元 、 ス タ ッ ク の 切 り 替 え 、 プ ロ セ ス の コ ン テ キ ス ト (プ ロ セ ッ サ フ ラ グ 、 レ ジ ス タ ー (ス タ ッ ク ポ イ ン タ ー 、 命 令 ポ イ ン タ ー を 含 む )) の 復 元 を 行 い 、 プ ロ セ ス が シ グ ナ ル に よ り 割 り 込 ま れ た 場 所 か ら 実 行 を 再 開 で き る よ う に す る 。

返 り 値

sigreturn() が 返 る こ と は な い 。

準 拠

多 く の UNIX 系 の シ ス テ ム に は sigreturn() シ ス テ ム コ ー ル か 似 た よ う な シ ス テ ム コ ー ル が あ る 。 し か し な が ら 、 こ の シ ス テ ム コ ー ル は POSIX に は 規 定 さ れ て お ら ず 、 そ の 動 作 の 詳 細 は シ ス テ ム に よ り 異 な る 。

注 意

sigreturn() は シ グ ナ ル ハ ン ド ラ ー を 実 装 す る た め だ け に 存 在 し て い る 。 こ れ ら を 直 接 呼 び 出 す の は 決 し て 行 う べ き で は な い 。 sigreturn() に 渡 さ れ る 引 き 数 の 詳 細 は ア ー キ テ ク チ ャ ー に よ り 異 な る 。 か つ て 、 UNIX シ ス テ ム で は signal trampoline コ ー ド が ユ ー ザ ー ス タ ッ ク に 置 か れ て い た 。 今 日 で は 、 ユ ー ザ ー ス タ ッ ク の ペ ー ジ は 保 護 さ れ 、 コ ー ド の 実 行 は 禁 止 さ れ て い る 。 し た が っ て 、 現 代 の Linux シ ス テ ム で は 、 ア ー キ テ ク チ ャ ー 依 存 で は あ る が 、 signal trampoline コ ー ド は vdso(7) 内 も し く は C ラ イ ブ ラ リ 内 に 置 か れ る 。 後 者 の 場 合 、 C ラ イ ブ ラ リ は trampoline code の 場 所 を sigaction(2) に 渡 さ れ る sigaction 構 造 体 の sa_restorer フ ィ ー ル ド を 使 っ て 渡 し 、 sa_flags フ ィ ー ル ド の SA_RESTORER フ ラ グ を セ ッ ト す る 。 保 存 さ れ た プ ロ セ ス コ ン テ キ ス ト 情 報 は ucontext_t構 造 体 に 置 か れ る (<sys/ucontext.h> 参 照 )。 こ の 構 造 体 は 、 SA_SIGINFO フ ラ グ を 付 け て 設 定 さ れ た シ グ ナ ル ハ ン ド ラ ー の 第 3 引 き 数 と し て シ ン グ ル ハ ン ド ラ ー 内 で 参 照 で き る 。 他 の い く つ か の UNIX シ ス テ ム で は 、 signal trampoline の 扱 い は 少 し 異 な る 。 特 に 、 い く つ か の シ ス テ ム で は 、 ユ ー ザ ー モ ー ド に 戻 る 際 に 、 カ ー ネ ル は 制 御 を (シ グ ナ ル ハ ン ド ラ ー で は な く ) trampoline に 渡 し 、 trampoline コ ー ド が シ グ ナ ル ハ ン ド ラ ー を 呼 び 出 す (そ の 後 ハ ン ド ラ ー が 返 る と sigreturn() を 呼 び 出 す )。

関 連 項 目

kill(2), restart_syscall(2), sigaltstack(2), signal(2), getcontext(3), signal(7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。