.\" 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 2012\-05\-05 Linux "Linux Programmer's Manual"
+.\"
+.\" Japanese Version Copyright (c) 1997 HANATAKA Shinya
+.\" all rights reserved.
+.\" Translated 1997-03-03, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
+.\" Modified 2000-09-24, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
+.\" Updated & Modified 2002-01-14, Yuichi SATO <ysato@h4.dion.ne.jp>
+.\" Updated & Modified 2004-01-17, Yuichi SATO <ysato444@yahoo.co.jp>
+.\" Updated & Modified 2005-01-07, Yuichi SATO
+.\" Updated 2007-06-01, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.50
+.\" Updated 2007-06-13, Akihiro MOTOKI, LDP v2.55
+.\" Updated 2008-08-08, Akihiro MOTOKI, LDP v3.05
+.\" Updated 2012-05-29, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
+.\" Updated 2013-07-22, Akihiro MOTOKI <amotoki@gmail.com>
+.\"
+.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
.PP
.\" libc4 and libc5 define
.\" .IR SignalHandler ;
-\fIsighandler_t\fP の使用は GNU 拡張であり、 \fB_GNU_SOURCE\fP が定義された
-場合に公開される。glibc では \fB_BSD_SOURCE\fP が定義された場合には (BSD
-由来の) \fIsig_t\fP も定義される。このような型を使用しないと、
+\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 にリセットされ、システムは同じシグナルがさらに生成されても シグナルの配送をブロックしなかった。
-System V でも、 \fBsignal\fP() に対してこれらの挙動を規定している。 こうした挙動はまずく、ハンドラがハンドラ自身を再設定する機会が
-来るより前に、同じシグナルがまた配送される可能性がある。 さらに、同じシグナルが立て続けに配送されると、同じシグナルが
-ハンドラを繰り返し起動されることになる。
+そのシグナルの処理方法は \fBSIG_DFL\fP にリセットされ、システムは同じシグナルがさらに生成されても
+シグナルの配送をブロックしなかった。これは、以下のフラグで \fBsigaction\fP(2) を呼び出すのと等価である。
+
+ sa.sa_flags = SA_RESETHAND | SA_NODEFER;
+
+System\ V でも、 \fBsignal\fP() に対してこれらの挙動を規定している。
+こうした挙動はまずく、ハンドラがハンドラ自身を再設定する機会が 来るより前に、同じシグナルがまた配送される可能性がある。
+さらに、同じシグナルが立て続けに配送されると、同じシグナルが ハンドラを繰り返し起動されることになる。
+
+BSD はこの状況が改善したが、残念なことに、その過程で既存の \fBsignal\fP() の挙動も変更された。 BSD
+では、シグナルハンドラが起動された際、 シグナルの処理方法はリセットされず、 ハンドラの実行中は、同じシグナルのさらなる生成は配送がブロックされる。
+また、 シグナルハンドラが中断された場合、 停止中のシステムコールのいくつかは自動的に再スタートされる。 BSD の挙動は、 以下のフラグを指定した
+\fBsigaction\fP(2) の呼び出しと等価である。
-BSD では、シグナル処理の挙動を変更することで、この状況を改善した (しかし、残念なことに、 \fBsignal\fP()
-を使ってハンドラを設定する際に挙動が黙って変更される)。 BSD では、シグナルハンドラが起動された際、 シグナルの処理方法はリセットされず、
-ハンドラの実行中は、同じシグナルのさらなる生成は配送がブロックされる。
+ sa.sa_flags = SA_RESTART;
Linux での状況は以下の通りである。
.IP * 2
-カーネルの \fBsignal\fP() システムコールは System V 方式を提供している。
+カーネルの \fBsignal\fP() システムコールは System\ V 方式を提供している。
.IP *
デフォルトでは、glibc 2 以降では、 \fBsignal\fP() ラッパー関数はカーネルのシステムコールを起動しない。 代わりに、ラッパー関数は
BSD 方式を示すフラグを使って \fBsigaction\fP(2) を呼び出す。 機能検査マクロ \fB_BSD_SOURCE\fP
.\" System V semantics are also provided if one uses the separate
.\" .BR sysv_signal (3)
.\" function.
-glibc 2 以降では、機能検査マクロ \fB_BSD_SOURCE\fP が定義されていなければ、 \fBsignal\fP() は System V
+glibc 2 以降では、機能検査マクロ \fB_BSD_SOURCE\fP が定義されていなければ、 \fBsignal\fP() は System\ V
方式となる。 (\fBgcc\fP(1) が標準指定モード (\fI\-std=xxx\fP or \fI\-ansi\fP) で起動された場合、もしくは
\fB_POSIX_SOURCE\fP, \fB_XOPEN_SOURCE\fP, \fB_SVID_SOURCE\fP
といった他の様々な機能検査マクロが定義された場合、 デフォルトの \fB_BSD_SOURCE\fP の暗黙の定義は行われない。
\fBfeature_test_macros\fP(7) を参照のこと。)
.IP *
-Linux の libc4 と libc5 の \fBsignal\fP() 関数は System V 方式である。 libc5 システムにおいて
+Linux の libc4 と libc5 の \fBsignal\fP() 関数は System\ V 方式である。 libc5 システムにおいて
\fI<signal.h>\fP のかわりに \fI<bsd/signal.h>\fP をインクルードすると、
\fBsignal\fP() は \fB__bsd_signal\fP() に再定義され、 \fBsignal\fP() は BSD 方式となる。
.SH 関連項目
\fBsigqueue\fP(3), \fBsigsetops\fP(3), \fBsigvec\fP(3), \fBsysv_signal\fP(3),
\fBsignal\fP(7)
.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.41 の一部
-である。プロジェクトの説明とバグ報告に関する情報は
-http://www.kernel.org/doc/man\-pages/ に書かれている。
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.67 の一部である。
+プロジェクトの説明とバグ報告に関する情報は \%http://www.kernel.org/doc/man\-pages/ に書かれている。