.\" 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"
+.TH SIGNAL 2 2014\-08\-19 Linux "Linux Programmer's Manual"
.SH 名前
signal \- ANSI C シグナル操作
.SH 書式
\fBこのシステムコールの使用は避け、\fP 代わりに \fBsigaction\fP(2) を使用すること。 下記の「移植性」を参照。
\fBsignal\fP() はシグナル \fIsignum\fP の処理方法を \fIhandler\fP に設定する。 \fIhandler\fP には、
-\fBSIG_IGN\fPã\80\81 \fBSIG_DFL\fPã\80\81 ã\83\97ã\83ã\82°ã\83©ã\83\9eã\81\8cå®\9a義ã\81\97ã\81\9fé\96¢æ\95° (ã\80\8cã\82·ã\82°ã\83\8aã\83«ã\83»ã\83\8fã\83³ã\83\89ã\83©」) のアドレスの いずれかを指定する。
+\fBSIG_IGN\fPã\80\81 \fBSIG_DFL\fPã\80\81 ã\83\97ã\83ã\82°ã\83©ã\83\9eã\81\8cå®\9a義ã\81\97ã\81\9fé\96¢æ\95° (ã\80\8cã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼」) のアドレスの いずれかを指定する。
シグナル \fIsignum\fP がプロセスに配送されると、以下のいずれかが発生する。
.TP 3
.TP
*
処理方法として関数が設定されている場合、 まず最初に処理方法が \fBSIG_DFL\fP にリセットされるかそのシグナルのブロックが実行された後、
-\fIsignum\fP を引き数として \fIhandler\fP が呼び出される。 ハンドラが起動される際にシグナルがブロックされた場合、
-ハンドラが返る際にそのシグナルのブロックが解除される。
+\fIsignum\fP ã\82\92å¼\95ã\81\8dæ\95°ã\81¨ã\81\97ã\81¦ \fIhandler\fP ã\81\8cå\91¼ã\81³å\87ºã\81\95ã\82\8cã\82\8bã\80\82 ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81\8cèµ·å\8b\95ã\81\95ã\82\8cã\82\8bé\9a\9bã\81«ã\82·ã\82°ã\83\8aã\83«ã\81\8cã\83\96ã\83ã\83\83ã\82¯ã\81\95ã\82\8cã\81\9få ´å\90\88ã\80\81
+ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81\8cè¿\94ã\82\8bé\9a\9bã\81«ã\81\9dã\81®ã\82·ã\82°ã\83\8aã\83«ã\81®ã\83\96ã\83ã\83\83ã\82¯ã\81\8c解é\99¤ã\81\95ã\82\8cã\82\8bã\80\82
.PP
シグナル \fBSIGKILL\fP と \fBSIGSTOP\fP は捕捉できず、無視することもできない。
.SH 返り値
-\fBsignal\fP() ã\81¯ã\80\81ä»\8aã\81¾ã\81§ã\81®ã\82·ã\82°ã\83\8aã\83«ã\83»ã\83\8fã\83³ã\83\89ã\83©の値を返す。 エラーの場合は \fBSIG_ERR\fP を返し、 \fIerrno\fP
+\fBsignal\fP() ã\81¯ã\80\81ä»\8aã\81¾ã\81§ã\81®ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼の値を返す。 エラーの場合は \fBSIG_ERR\fP を返し、 \fIerrno\fP
にエラーの原因を示す値を設定する。
.SH エラー
.TP
.PP
\fBSIGCHLD\fP の動作として \fBSIG_IGN\fP を設定した場合の詳細な動作については、 \fBsigaction\fP(2) を参照すること。
.PP
-ã\82·ã\82°ã\83\8aã\83«ã\83»ã\83\8fã\83³ã\83\89ã\83©内から安全に呼び出すことができる、 async\-signal\-safe functions (非同期シングルで安全な関数) の
+ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼内から安全に呼び出すことができる、 async\-signal\-safe functions (非同期シングルで安全な関数) の
リストについては \fBsignal\fP(7) を参照。
.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
.in
.SS 移植性
移植性のある \fBsignal\fP() の使い方は、シグナルの処理方法を \fBSIG_DFL\fP か \fBSIG_IGN\fP に設定する方法だけである。
-ã\82·ã\82°ã\83\8aã\83«ã\83»ã\83\8fã\83³ã\83\89ã\83©を設定するのに \fBsignal\fP() を使ったときの動作はシステムにより異なる (POSIX.1
+ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼を設定するのに \fBsignal\fP() を使ったときの動作はシステムにより異なる (POSIX.1
は明示的にこの違いを認めている)。 \fB移植性が必要なときはこのシステムコールを使用しないこと。\fP
POSIX.1 は、 \fBsigaction\fP(2) を規定することで移植性に関する混乱を解決した。 \fBsigaction\fP(2)
-ã\81¯ã\82·ã\82°ã\83\8aã\83«ã\83»ã\83\8fã\83³ã\83\89ã\83©が起動される際の挙動を明示的に制御できる。 \fBsignal\fP() の代わりにこのインターフェイスを使うこと。
+ã\81¯ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼が起動される際の挙動を明示的に制御できる。 \fBsignal\fP() の代わりにこのインターフェイスを使うこと。
-オリジナルの UNIX システムでは、 \fBsignal\fP() を使って設定されたハンドラがシグナルの配送により起動されると、
+ã\82ªã\83ªã\82¸ã\83\8aã\83«ã\81® UNIX ã\82·ã\82¹ã\83\86ã\83 ã\81§ã\81¯ã\80\81 \fBsignal\fP() ã\82\92使ã\81£ã\81¦è¨å®\9aã\81\95ã\82\8cã\81\9fã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81\8cã\82·ã\82°ã\83\8aã\83«ã\81®é\85\8dé\80\81ã\81«ã\82\88ã\82\8aèµ·å\8b\95ã\81\95ã\82\8cã\82\8bã\81¨ã\80\81
そのシグナルの処理方法は \fBSIG_DFL\fP にリセットされ、システムは同じシグナルがさらに生成されても
シグナルの配送をブロックしなかった。これは、以下のフラグで \fBsigaction\fP(2) を呼び出すのと等価である。
sa.sa_flags = SA_RESETHAND | SA_NODEFER;
-System V でも、 \fBsignal\fP() に対してこれらの挙動を規定している。 こうした挙動はまずく、ハンドラがハンドラ自身を再設定する機会が
-来るより前に、同じシグナルがまた配送される可能性がある。 さらに、同じシグナルが立て続けに配送されると、同じシグナルが
-ã\83\8fã\83³ã\83\89ã\83©を繰り返し起動されることになる。
+System\ V でも、 \fBsignal\fP() に対してこれらの挙動を規定している。
+こうした挙動はまずく、ハンドラーがハンドラー自身を再設定する機会が 来るより前に、同じシグナルがまた配送される可能性がある。
+ã\81\95ã\82\89ã\81«ã\80\81å\90\8cã\81\98ã\82·ã\82°ã\83\8aã\83«ã\81\8cç«\8bã\81¦ç¶\9aã\81\91ã\81«é\85\8dé\80\81ã\81\95ã\82\8cã\82\8bã\81¨ã\80\81å\90\8cã\81\98ã\82·ã\82°ã\83\8aã\83«ã\81\8c ã\83\8fã\83³ã\83\89ã\83©ã\83¼を繰り返し起動されることになる。
BSD はこの状況が改善したが、残念なことに、その過程で既存の \fBsignal\fP() の挙動も変更された。 BSD
-ã\81§ã\81¯ã\80\81ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\81\8cèµ·å\8b\95ã\81\95ã\82\8cã\81\9fé\9a\9bã\80\81 ã\82·ã\82°ã\83\8aã\83«ã\81®å\87¦ç\90\86æ\96¹æ³\95ã\81¯ã\83ªã\82»ã\83\83ã\83\88ã\81\95ã\82\8cã\81\9aã\80\81 ã\83\8fã\83³ã\83\89ã\83©の実行中は、同じシグナルのさらなる生成は配送がブロックされる。
-また、 シグナルハンドラが中断された場合、 停止中のシステムコールのいくつかは自動的に再スタートされる。 BSD の挙動は、 以下のフラグを指定した
+ã\81§ã\81¯ã\80\81ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81\8cèµ·å\8b\95ã\81\95ã\82\8cã\81\9fé\9a\9bã\80\81 ã\82·ã\82°ã\83\8aã\83«ã\81®å\87¦ç\90\86æ\96¹æ³\95ã\81¯ã\83ªã\82»ã\83\83ã\83\88ã\81\95ã\82\8cã\81\9aã\80\81 ã\83\8fã\83³ã\83\89ã\83©ã\83¼の実行中は、同じシグナルのさらなる生成は配送がブロックされる。
+ã\81¾ã\81\9fã\80\81 ã\82·ã\82°ã\83\8aã\83«ã\83\8fã\83³ã\83\89ã\83©ã\83¼ã\81\8cä¸æ\96ã\81\95ã\82\8cã\81\9få ´å\90\88ã\80\81 å\81\9cæ¢ä¸ã\81®ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81®ã\81\84ã\81\8fã\81¤ã\81\8bã\81¯è\87ªå\8b\95ç\9a\84ã\81«å\86\8dã\82¹ã\82¿ã\83¼ã\83\88ã\81\95ã\82\8cã\82\8bã\80\82 BSD ã\81®æ\8c\99å\8b\95ã\81¯ã\80\81 以ä¸\8bã\81®ã\83\95ã\83©ã\82°ã\82\92æ\8c\87å®\9aã\81\97ã\81\9f
\fBsigaction\fP(2) の呼び出しと等価である。
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
を定義していれば、このデフォルトの動作となる。 デフォルトでは、 \fB_BSD_SOURCE\fP が定義される。 \fB_BSD_SOURCE\fP は
\fB_GNU_SOURCE\fP が定義された場合には暗黙のうちに定義され、 もちろん明示的に定義することもできる。
-.sp
+.IP *
.\"
.\" 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
+.\" .IP *
+.\" The
+.\" .BR signal ()
+.\" function in Linux libc4 and libc5 provide System\ V semantics.
+.\" If one on a libc5 system includes
+.\" .I <bsd/signal.h>
+.\" instead of
+.\" .IR <signal.h> ,
+.\" then
+.\" .BR signal ()
+.\" provides BSD semantics.
+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 システムにおいて
-\fI<signal.h>\fP のかわりに \fI<bsd/signal.h>\fP をインクルードすると、
-\fBsignal\fP() は \fB__bsd_signal\fP() に再定義され、 \fBsignal\fP() は BSD 方式となる。
.SH 関連項目
\fBkill\fP(1), \fBalarm\fP(2), \fBkill\fP(2), \fBkillpg\fP(2), \fBpause\fP(2),
\fBsigaction\fP(2), \fBsignalfd\fP(2), \fBsigpending\fP(2), \fBsigprocmask\fP(2),
\fBsigqueue\fP(3), \fBsigsetops\fP(3), \fBsigvec\fP(3), \fBsysv_signal\fP(3),
\fBsignal\fP(7)
.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
-である。プロジェクトの説明とバグ報告に関する情報は
-http://www.kernel.org/doc/man\-pages/ に書かれている。
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部である。
+プロジェクトの説明とバグ報告に関する情報は \%http://www.kernel.org/doc/man\-pages/ に書かれている。