sigpause -
ブロックされたシグナルをアトミックに解放して割り込みを待つ
#include <signal.h>
int sigpause(int sigmask); /* BSD (ただし「備考」を参照) */
int sigpause(int sig); /* System V / UNIX 95 */
この関数を使わないこと。
代わりに
sigsuspend(2)
を使うこと。
関数
sigpause()
はシグナルを待つように設計されている。
この関数はプロセスのシグナルマスク
(ブロックされたシグナルのセット)
を変更し、
シグナルが到着するのを待つ。
シグナルが到着すると、シグナルマスクは元に戻される。
sigpause()
が返った場合、この関数はシグナルによって割り込まれている。
返り値は -1 で、
errno は
EINTR に設定される。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
sigpause() |
Thread safety |
MT-Safe |
System V 版の
sigpause() は POSIX.1-2001
で標準化されている。
POSIX.1-2008
でも規定されているが、ここでは廃止予定
(obsolete)
扱いとなっている。
この関数の古典的な BSD
版は 4.2BSD で登場した。
この関数はプロセスのシグナルマスクを
sigmask に設定する。 UNIX 95
では BSD
版と互換性のない System V
版のこの関数が標準化された。
UNIX 95
版は、指定されたシグナル
sig
をプロセスのシグナルマスクから削除するだけである。
同じ名前で互換性のない
2
つの関数があるという不幸な事態は、
sigsuspend(2)
関数によって解消された。
この関数は (
int
の代わりに)
sigset_t *
引数をとる。
Linux
では、このルーチンは
Sparc (sparc64)
アーキテクチャーでのみ
システムコールとなっている。
機能検査マクロ
_BSD_SOURCE
が定義され、
_POSIX_SOURCE,
_POSIX_C_SOURCE,
_XOPEN_SOURCE,
_GNU_SOURCE,
_SVID_SOURCE
のいずれも定義されていない場合、
glibc は BSD 版を使う。
それ以外の場合には、System
V
版を使用し、この場合には宣言を得るためには以下のように機能検査マクロを定義しなければならない。
- *
- glibc 2.26 以降: _XOPEN_SOURCE >= 500
- *
- glibc 2.25 以前: _XOPEN_SOURCE
glibc 2.19 以降では、
<signal.h>
では System V
版だけが公開される。
BSD 版の
sigpause()
を使用していたアプリケーションは
sigsuspend(2)
を使用するように修正すべきである。
kill(2),
sigaction(2),
sigprocmask(2),
sigsuspend(2),
sigblock(3),
sigvec(3),
feature_test_macros(7)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。