EN JA
SIGPAUSE(2)
SIGPAUSE(2) FreeBSD System Calls Manual SIGPAUSE(2)

名称

sighold, sigignore, sigpause, sigrelse, sigsetシグナル管理のための古いインターフェース

ライブラリ

Standard C Library (libc, -lc)

書式

#include < signal.h>

int
sighold( int sig);

int
sigignore( int sig);

int
xsi_sigpause( int sigmask);

int
sigrelse( int sig);

void (*)(int)
sigset( int, void (*disp)(int));

int
sigpause( int sigmask);

解説

このインタフェースは、 sigsuspend(2) sigaction(2) によって旧式のものとなっています。

sigset() 関数は、シグナル disposition を変更します。 sig 引数は、 SIGKILLSIGSTOP を除いて、どんなシグナルであってもよい、シグナルを指定します。 disp 引数は、 SIG_DFL, SIG_IGN またはシグナルハンドラのアドレスであるシグナルの disposition を指定します。 sigset() が使用されて、 disp がシグナルハンドラのアドレスであるなら、システムは、シグナルハンドラを実行する前に、 sig を呼び出しプロセスのシグナルマスクに追加します。シグナルハンドラが戻るとき、システムは、シグナルの配信の前の状態に呼び出しプロセスのシグナルマスクを復旧します。さらに、 sigset() が使用されて、 dispSIG_HOLD と等しいなら、 sig は、呼び出しプロセスのシグナルマスクに追加され、 sig の disposition は、変更しないままとなります。 sigset() が使用され、 dispSIG_HOLD と等しくないなら、 sig は、呼び出しプロセスのシグナルマスクから取り除かれます。

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

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

sigignore() 関数は、 sig の disposition を SIG_IGN に設定します。

xsi_sigpause() 関数は、呼び出しプロセスのシグナルマスクから sig を取り除き、シグナルが受信されるまで、呼び出しプロセスをサスペンド (中断) します。 xsi_sigpause() 関数は、戻る前に、プロセスのシグナルマスクを元の状態に復旧します。

sigpause() 関数は、マスクされたシグナルのセットに sigmask を割り当ててからシグナルの到着を待機します。戻ると、マスクされたシグナルのセットが復元されます。通常、 sigmask 引数の 0 は、ブロックされるシグナルがないことを表わします。

RETURN VALUES

sigpause() と xsi_sigpause() 関数は、常に割り込まれることで終了し、 errnoEINTR に設定して -1 で返ります。

成功して終了するとき、シグナルがブロックされていたなら、 sigset() は、 SIG_HOLD を返し、シグナルがブロックされていなかったなら、シグナルの前の disposition を返します。そうでなければ、 SIG_ERR が返され、 errno にエラーを示す値が設定されます。

他のすべての関数について、成功して終了すれば、0 が返されます。そうでければ、-1 が返され、 errno にエラーを示す値が設定されます:

[ EINVAL]
sig 引数が有効なシグナル番号ではありません。
[ EINVAL]
sigset() と sigignore() 関数について、 SIGKILL または SIGSTOP を捕獲するか、または無視されるように試みられました。

規格

sigpause() 関数は、歴史的な 4.3BSD アプリケーションとのコンパチビリティのために実装されています。シグナルマスクではなく 1 つのシグナル番号を使用していた、同じ名前の非コンパチブルなインタフェースが AT&T System V UNIX に存在し、そこから IEEE Std 1003.1-2001 (“POSIX.1”) のオプションとして X/Open System Interfaces (XSI) にコピーされました。 FreeBSD は、 xsi_sigpause() という名前でそれを実装します。 sighold(), sigignore(), sigrelse() と sigset() 関数は、 System VXSI インタフェースと互換性があるように実装されています。

歴史

sigpause() 関数は、 4.2BSD で登場しました。しかし、現在では、この関数を使用することは推奨されていません。他のすべての関数は、 FreeBSD 8.1 で登場し、実装される前に、非推奨とされました。
June 2, 1993 FreeBSD