Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all bug

名前

       sigset, sighold, sigrelse, sigignore - System V 版シグナル API

書式

       #include <signal.h>

       typedef void (*sighandler_t)(int);

       sighandler_t sigset(int sig, sighandler_t disp);

       int sighold(int sig);

       int sigrelse(int sig);

       int sigignore(int sig);

   glibc 向けの機能検査マクロの要件 (feature_test_macros(7)  参照):

       sigset(), sighold(), sigrelse(), sigignore():
           _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

説明

       これらの関数は、昔ながらの  System  V  版シグナル API を使用しているプログラム に対して互換性のあるインタ
       フェースを glibc で提供するものである。 この API は過去のものであり、新しいアプリケーションでは POSIX  シ
       グナル API (sigaction(2), sigprocmask(2)  など) を使用すべきである。

       関数  sigset()  はシグナル sig のシグナルハンドラの動作を変更する。 disp 引き数には、シグナルハンドラ関数
       のアドレスか、 以下の定数のいずれか一つを指定できる。

       SIG_DFL
              sig の動作をデフォルトにリセットする。

       SIG_IGN
              sig を無視する。

       SIG_HOLD
              そのプロセスのシグナルマスクに sig を追加するが、 sig の動作は変更しない。

       disp にシグナルハンドラのアドレスが指定された場合、  シグナルハンドラの実行中は、そのプロセスのシグナルマ
       スクに sig が追加される。

       dispSIG_HOLD 以外の値が指定された場合、 そのプロセスのシグナルマスクから sig が削除される。

       シグナル SIGKILLSIGSTOP に対する動作は変更できない。

       関数 sighold()  は、呼び出し元プロセスのシグナルマスクに sig を追加する。

       関数 sigrelse()  は、呼び出し元プロセスのシグナルマスクから sig を削除する。

       関数 sigignore()  は、 sig の動作を SIG_IGN に設定する。

返り値

       sigset()  は成功すると、 呼び出し前に sig がブロックされていた場合には SIG_HOLD を返し、 ブロックされてい
       なかった場合には 変更前のそのシグナルの動作を返す。 エラーの場合、 sigset()  は -1  を返し、  errno  にエ
       ラーを示す値をセットする。 但し、以下の「バグ」の節も参照のこと。

       関数  sighold(), sigrelse(), sigignore()  は成功すると 0 を返す。エラーの場合、-1 を返し、 errno にエラー
       を示す値をセットする。

エラー

       sigset()  に関しては、 sigaction(2)  と sigprocmask(2)  の「エラー」の節を参照。

       sighold()  と sigrelse()  に関しては、 sigprocmask(2)  の「エラー」の節を参照。

       sigignore()  に関しては、 sigaction(2)  の「エラー」の節を参照。

準拠

       SVr4, POSIX.1-2001.  これらの関数は廃止予定である。新しいプログラムでは使用しないこと。 POSIX.1-2008 は、
       sighold(),  sigignore(), sigpause(), sigrelse(), sigset() を廃止予定としている。 代わりに、 sigaction(2),
       sigprocmask(2), pthread_sigmask(3), sigsuspend(2)  の使用が推奨されている。

注意

       これらの関数は glibc 2.1 で登場した。

       sighandler_t 型は GNU による拡張であり、この man page で sigset()  のプロトタイプをより読みやすくするため
       に使われているだけである。

       関数  sigset()  は信頼性のあるシグナル処理機構を提供する (sa_mask を 0 で sigaction(2) を呼び出したときと
       同様)。

       System V では、関数  signal()   が提供する処理機構は信頼性のないものである  (sa_maskSA_RESETHAND  |
       SA_NODEFER として sigaction(2)  を呼び出したときと同様)。 BSD では、 signal()  は信頼性のある処理機構を提
       供する。  POSIX.1-2001  では、  signal()  のこの点は規定しないままとなっている。   さらなる詳細については
       signal(2)  を参照。

       BSD と System V のどちらのシステムでも シグナルを待つために、 sigpause(3)  という名前の関数が提供されてい
       るが、 この関数の引き数は両方のシステムで異なる。 詳細は sigpause(3)  を参照。

バグ

       2.2 より前のバージョンの glibc では、 dispSIG_HOLD  以外の値が指定された場合、  sig  のブロック解除を
       行っていなかった。

       2.3.5  以前の全てのバージョンの glibc では、 sigset()  が変更前のシグナルの動作を正しく返さない場合が 2つ
       ある。 一つめは、 dispSIG_HOLD が指定されると、成功した場合 sigset()  は常に SIG_HOLD  を返すことであ
       る。 正しくは、(シグナルがブロックされていなかった場合には)  変更前のシグナルの動作を返すべきである (シグ
       ナルがブロックされていた場合には、 SIG_HOLD が返される)。  もう一つは、シグナルが現在ブロックされている場
       合には、 成功した場合の sigset()  の返り値は SIG_HOLD になるべきであるが、実際には 変更前のシグナルの動作
       が返されることである。 これらの問題は glibc 2.5 以降で修正されている。

関連項目

       kill(2), pause(2), sigaction(2), signal(2), sigprocmask(2), raise(3), sigpause(3), sigvec(3), signal(7)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 3.54 の一部 である。プロジェクトの説明とバグ報告
       に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。