.\" Copyright (c) 2005 by Michael Kerrisk .\" .\" %%%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. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .\" .\" Japanese Version Copyright (c) 2005 Akihiro MOTOKI all rights reserved. .\" Translated 2005-12-04, Akihiro MOTOKI .\" .TH SIGSET 3 2020\-08\-13 Linux "Linux Programmer's Manual" .SH 名前 sigset, sighold, sigrelse, sigignore \- System V 版シグナル API .SH 書式 \fB#include \fP .PP \fBtypedef void (*sighandler_t)(int);\fP .PP \fBsighandler_t sigset(int \fP\fIsig\fP\fB, sighandler_t \fP\fIdisp\fP\fB);\fP .PP \fBint sighold(int \fP\fIsig\fP\fB);\fP .PP \fBint sigrelse(int \fP\fIsig\fP\fB);\fP .PP \fBint sigignore(int \fP\fIsig\fP\fB);\fP .PP .RS -4 glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): .RE .PP .ad l \fBsigset\fP(), \fBsighold\fP(), \fBsigrelse\fP(), \fBsigignore\fP(): .br .RS 4 .\" || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED _XOPEN_SOURCE\ >=\ 500 .RE .ad .SH 説明 これらの関数は、昔ながらの System V 版シグナル API を使用しているプログラム に対して互換性のあるインターフェースを glibc で提供するものである。 この API は過去のものであり、新しいアプリケーションでは POSIX シグナル API (\fBsigaction\fP(2), \fBsigprocmask\fP(2) など) を使用すべきである。 .PP 関数 \fBsigset\fP() はシグナル \fIsig\fP のシグナルハンドラーの動作を変更する。 \fIdisp\fP 引数には、シグナルハンドラー関数のアドレスか、 以下の定数のいずれか一つを指定できる。 .TP \fBSIG_DFL\fP \fIsig\fP の動作をデフォルトにリセットする。 .TP \fBSIG_IGN\fP \fIsig\fP を無視する。 .TP \fBSIG_HOLD\fP そのプロセスのシグナルマスクに \fIsig\fP を追加するが、 \fIsig\fP の動作は変更しない。 .PP \fIdisp\fP にシグナルハンドラーのアドレスが指定された場合、 シグナルハンドラーの実行中は、そのプロセスのシグナルマスクに \fIsig\fP が追加される。 .PP \fIdisp\fP に \fBSIG_HOLD\fP 以外の値が指定された場合、 そのプロセスのシグナルマスクから \fIsig\fP が削除される。 .PP シグナル \fBSIGKILL\fP と \fBSIGSTOP\fP に対する動作は変更できない。 .PP 関数 \fBsighold\fP() は、呼び出し元プロセスのシグナルマスクに \fIsig\fP を追加する。 .PP 関数 \fBsigrelse\fP() は、呼び出し元プロセスのシグナルマスクから \fIsig\fP を削除する。 .PP 関数 \fBsigignore\fP() は、 \fIsig\fP の動作を \fBSIG_IGN\fP に設定する。 .SH 返り値 \fBsigset\fP() は成功すると、 呼び出し前に \fIsig\fP がブロックされていた場合には \fBSIG_HOLD\fP を返し、 ブロックされていなかった場合には 変更前のそのシグナルの動作を返す。 エラーの場合、 \fBsigset\fP() は \-1 を返し、 \fIerrno\fP にエラーを示す値をセットする。 但し、以下の「バグ」の節も参照のこと。 .PP 関数 \fBsighold\fP(), \fBsigrelse\fP(), \fBsigignore\fP() は成功すると 0 を返す。エラーの場合、\-1 を返し、 \fIerrno\fP にエラーを示す値をセットする。 .SH エラー \fBsigset\fP() に関しては、 \fBsigaction\fP(2) と \fBsigprocmask\fP(2) の「エラー」の節を参照。 .PP \fBsighold\fP() と \fBsigrelse\fP() に関しては、 \fBsigprocmask\fP(2) の「エラー」の節を参照。 .PP \fBsigignore\fP() に関しては、 \fBsigaction\fP(2) の「エラー」の節を参照。 .SH 属性 この節で使用されている用語の説明については、 \fBattributes\fP(7) を参照。 .TS allbox; lbw23 lb lb l l l. インターフェース 属性 値 T{ \fBsigset\fP(), \fBsighold\fP(), .br \fBsigrelse\fP(), \fBsigignore\fP() T} Thread safety MT\-Safe .TE .SH 準拠 SVr4, POSIX.1\-2001, POSIX.1\-2008. これらの関数は廃止予定である。新しいプログラムでは使用しないこと。 POSIX.1\-2008 は、 \fBsighold\fP(), \fBsigignore\fP(), \fBsigpause\fP(3), \fBsigrelse\fP(), \fBsigset\fP() を廃止予定としている。 代わりに、 \fBsigaction\fP(2), \fBsigprocmask\fP(2), \fBpthread_sigmask\fP(3), \fBsigsuspend\fP(2) の使用が推奨されている。 .SH 注意 これらの関数は glibc 2.1 で登場した。 .PP \fIsighandler_t\fP 型は GNU による拡張であり、この man page で \fBsigset\fP() のプロトタイプをより読みやすくするために使われているだけである。 .PP 関数 \fBsigset\fP() は信頼性のあるシグナル処理機構を提供する (\fIsa_mask\fP を 0 で \fBsigaction\fP(2) を呼び出したときと同様)。 .PP System V では、関数 \fBsignal\fP() が提供する処理機構は信頼性のないものである (\fIsa_mask\fP を \fISA_RESETHAND | SA_NODEFER\fP として \fBsigaction\fP(2) を呼び出したときと同様)。 BSD では、 \fBsignal\fP() は信頼性のある処理機構を提供する。 POSIX.1\-2001 では、 \fBsignal\fP() のこの点は規定しないままとなっている。 さらなる詳細については \fBsignal\fP(2) を参照。 .PP BSD と System V のどちらのシステムでも シグナルを待つために、 \fBsigpause\fP(3) という名前の関数が提供されているが、 この関数の引数は両方のシステムで異なる。 詳細は \fBsigpause\fP(3) を参照。 .SH バグ 2.2 より前のバージョンの glibc では、 \fIdisp\fP に \fBSIG_HOLD\fP 以外の値が指定された場合、 \fIsig\fP のブロック解除を行っていなかった。 .PP .\" See http://sourceware.org/bugzilla/show_bug.cgi?id=1951 2.3.5 以前の全てのバージョンの glibc では、 \fBsigset\fP() が変更前のシグナルの動作を正しく返さない場合が 2つある。 一つめは、 \fIdisp\fP に \fBSIG_HOLD\fP が指定されると、成功した場合 \fBsigset\fP() は常に \fBSIG_HOLD\fP を返すことである。 正しくは、(シグナルがブロックされていなかった場合には) 変更前のシグナルの動作を返すべきである (シグナルがブロックされていた場合には、 \fBSIG_HOLD\fP が返される)。 もう一つは、シグナルが現在ブロックされている場合には、 成功した場合の \fBsigset\fP() の返り値は \fBSIG_HOLD\fP になるべきであるが、実際には 変更前のシグナルの動作が返されることである。 これらの問題は glibc 2.5 以降で修正されている。 .SH 関連項目 \fBkill\fP(2), \fBpause\fP(2), \fBsigaction\fP(2), \fBsignal\fP(2), \fBsigprocmask\fP(2), \fBraise\fP(3), \fBsigpause\fP(3), \fBsigvec\fP(3), \fBsignal\fP(7) .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は \%https://www.kernel.org/doc/man\-pages/ に書かれている。