Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_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

説明

       これらの関数は、昔ながらの 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)  の「エラー」の節を参照。

属性

       この節で使用されている用語の説明については、 attributes(7) を参照。

       ┌────────────────────────┬───────────────┬─────────┐
       │インターフェース属性      │
       ├────────────────────────┼───────────────┼─────────┤
       │sigset(), sighold(),    │ Thread safety │ MT-Safe │
       │sigrelse(), sigignore() │               │         │
       └────────────────────────┴───────────────┴─────────┘

準拠

       SVr4,  POSIX.1-2001, POSIX.1-2008.  これらの関数は廃止予定である。新しいプログラムでは使用
       しないこと。 POSIX.1-2008 は、 sighold(), sigignore(), sigpause(3),  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 プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。