.\" based on work by Rik Faith <faith@cs.unc.edu>
.\" and Mike Battersby <mike@starbug.apana.org.au>.
.\"
+.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
.\"
.\" Modified 2004-11-19, mtk:
.\" added pointer to sigaction.2 for details of ignoring SIGCHLD
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
-.TH SIGNAL 2 2008\-07\-11 Linux "Linux Programmer's Manual"
+.TH SIGNAL 2 2013\-04\-19 Linux "Linux Programmer's Manual"
.SH 名前
signal \- ANSI C シグナル操作
.SH 書式
.PP
シグナル \fBSIGKILL\fP と \fBSIGSTOP\fP は捕捉できず、無視することもできない。
.SH 返り値
-\fBsignal\fP() は、今までのシグナル・ハンドラの値を返す。エラーの場合は \fBSIG_ERR\fP を返す。
+\fBsignal\fP() は、今までのシグナル・ハンドラの値を返す。 エラーの場合は \fBSIG_ERR\fP を返し、 \fIerrno\fP
+にエラーの原因を示す値を設定する。
.SH エラー
.TP
\fBEINVAL\fP
シグナル・ハンドラ内から安全に呼び出すことができる、 async\-signal\-safe functions (非同期シングルで安全な関数) の
リストについては \fBsignal\fP(7) を参照。
.PP
-\fIsighandler_t\fP の使用は GNU 拡張である。 各種バージョンの libc でこの型は定義済みである; libc4 と libc5 では
-\fISignalHandler\fP を定義している。 glibc では \fIsig_t\fP を定義しており、 \fB_GNU_SOURCE\fP
-が定義されている場合には \fIsighandler_t\fP も定義されている。 このような型を使用しないと、 \fBsignal\fP()
-の宣言は読みにくいものとなる。
+.\" libc4 and libc5 define
+.\" .IR SignalHandler ;
+\fIsighandler_t\fP の使用は GNU 拡張であり、 \fB_GNU_SOURCE\fP が定義された
+場合に公開される。glibc では \fB_BSD_SOURCE\fP が定義された場合には (BSD
+由来の) \fIsig_t\fP も定義される。このような型を使用しないと、
+\fBsignal\fP() の宣言は読みにくいものとなる。
.in +4n
.nf
はシグナル・ハンドラが起動される際の挙動を明示的に制御できる。 \fBsignal\fP() の代わりにこのインターフェイスを使うこと。
オリジナルの UNIX システムでは、 \fBsignal\fP() を使って設定されたハンドラがシグナルの配送により起動されると、
-そのシグナルの処理方法は \fBSIG_DFL\fP にリセットされ、システムは同じシグナルがさらに生成されても シグナルの配送をブロックしなかった。
+そのシグナルの処理方法は \fBSIG_DFL\fP にリセットされ、システムは同じシグナルがさらに生成されても
+シグナルの配送をブロックしなかった。これは、以下のフラグで \fBsigaction\fP(2) を呼び出すのと等価である。
+
+ sa.sa_flags = SA_RESETHAND | SA_NODEFER;
+
System V でも、 \fBsignal\fP() に対してこれらの挙動を規定している。 こうした挙動はまずく、ハンドラがハンドラ自身を再設定する機会が
来るより前に、同じシグナルがまた配送される可能性がある。 さらに、同じシグナルが立て続けに配送されると、同じシグナルが
ハンドラを繰り返し起動されることになる。
-BSD では、シグナル処理の挙動を変更することで、この状況を改善した (しかし、残念なことに、 \fBsignal\fP()
-を使ってハンドラを設定する際に挙動が黙って変更される)。 BSD では、シグナルハンドラが起動された際、 シグナルの処理方法はリセットされず、
-ハンドラの実行中は、同じシグナルのさらなる生成は配送がブロックされる。
+BSD はこの状況が改善したが、残念なことに、その過程で既存の \fBsignal\fP() の挙動も変更された。 BSD
+では、シグナルハンドラが起動された際、 シグナルの処理方法はリセットされず、 ハンドラの実行中は、同じシグナルのさらなる生成は配送がブロックされる。
+また、 シグナルハンドラが中断された場合、 停止中のシステムコールのいくつかは自動的に再スタートされる。 BSD の挙動は、 以下のフラグを指定した
+\fBsigaction\fP(2) の呼び出しと等価である。
+
+ sa.sa_flags = SA_RESTART;
Linux での状況は以下の通りである。
.IP * 2
\fBsigsuspend\fP(2), \fBbsd_signal\fP(3), \fBraise\fP(3), \fBsiginterrupt\fP(3),
\fBsigqueue\fP(3), \fBsigsetops\fP(3), \fBsigvec\fP(3), \fBsysv_signal\fP(3),
\fBsignal\fP(7)
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.52 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。