Provided by: manpages-ja-dev_0.5.0.0.20161015+dfsg-1_all 

名前
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/ に書かれている。