sigsetのヘルプ・マニュアル
日本語 英語
sigset --help
man sigset
SIGSET(3) Linux Programmer’s Manual SIGSET(3)
名前
sigset, sighold, sigrelse, sigignore - System V 版シグナル API
書式
#define _XOPEN_SOURCE 500
#include
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);
説明
これらの関数は、昔ながらの 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 が追加される。
disp に SIG_HOLD 以外の値が指定された場合、そのプロセスのシグナルマスク
から sig が削除される。
シグナル SIGKILL と SIGSTOP に対する動作は変更できない。
関 数 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_mask を SA_RESETHAND | SA_NODEFER として sigaction(2) を呼び出し た
と き と 同様)。 BSD では、 signal() は信頼性のある処理機構を提供する。
POSIX.1-2001 では、 signal() のこの点は規定しないままとなっている。さら
なる詳細については signal(2) を参照。
BSD と System V のどちらのシステムでもシグナルを待つために、 sig-
pause(3) という名前の関数が提供されているが、この関数の引き数は両方のシ
ステムで異なる。詳細は sigpause(3) を参照。
バグ
2.2 より前のバージョンの glibc では、 disp に SIG_HOLD 以外の値が指定さ
れた場合、 sig のブロック解除を行っていなかった。
2.3.5 以前の全てのバージョンの glibc では、 sigset() が変更前のシグナル
の 動作を正しく返さない場合が 2つある。一つめは、 disp に SIG_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), feature_test_macros(7), signal(7)
Linux 2009-03-15 SIGSET(3)
SIGSET(3) Linux Programmer’s Manual SIGSET(3)
NAME
sigset, sighold, sigrelse, sigignore - System V signal API
SYNOPSIS
#define _XOPEN_SOURCE 500
#include
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);
DESCRIPTION
These functions are provided in glibc as a compatibility interface for
programs that make use of the historical System V signal API. This API
is obsolete: new applications should use the POSIX signal API (sigac-
tion(2), sigprocmask(2), etc.)
The sigset() function modifies the disposition of the signal sig. The
disp argument can be the address of a signal handler function, or one
of the following constants:
SIG_DFL
Reset the disposition of sig to the default.
SIG_IGN
Ignore sig.
SIG_HOLD
Add sig to the process’s signal mask, but leave the disposition
of sig unchanged.
If disp specifies the address of a signal handler, then sig is added to
the process’s signal mask during execution of the handler.
If disp was specified as a value other than SIG_HOLD, then sig is
removed from the process’s signal mask.
The dispositions for SIGKILL and SIGSTOP cannot be changed.
The sighold() function adds sig to the calling process’s signal mask.
The sigrelse() function removes sig from the calling process’s signal
mask.
The sigignore() function sets the disposition of sig to SIG_IGN.
RETURN VALUE
On success, sigset() returns SIG_HOLD if sig was blocked before the
call, or the signal’s previous disposition if it was not blocked before
the call. On error, sigset() returns -1, with errno set to indicate
the error. (But see BUGS below.)
The sighold(), sigrelse(), and sigignore() functions return 0 on suc-
cess; on error, these functions return -1 and set errno to indicate the
error.
ERRORS
For sigset() see the ERRORS under sigaction(2) and sigprocmask(2).
For sighold() and sigrelse() see the ERRORS under sigprocmask(2).
For sigignore(), see the errors under sigaction(2).
CONFORMING TO
SVr4, POSIX.1-2001. These functions are obsolete: do not use them in
new programs. POSIX.1-2008 marks sighold(), sigignore(), sigpause(),
sigrelse(), and sigset() as obsolete, recommending the use of sigac-
tion(2), sigprocmask(2), pthread_sigmask(3), and sigsuspend(2) instead.
NOTES
These functions appeared in glibc version 2.1.
The sighandler_t type is a GNU extension; it is only used on this page
to make the sigset() prototype more easily readable.
The sigset() function provides reliable signal handling semantics (as
when calling sigaction(2) with sa_mask equal to 0).
On System V, the signal() function provides unreliable semantics (as
when calling sigaction(2) with sa_mask equal to SA_RESETHAND | SA_NODE-
FER). On BSD, signal() provides reliable semantics. POSIX.1-2001
leaves these aspects of signal() unspecified. See signal(2) for fur-
ther details.
In order to wait for a signal, BSD and System V both provided a func-
tion named sigpause(3), but this function has a different argument on
the two systems. See sigpause(3) for details.
BUGS
In versions of glibc before 2.2, sigset() did not unblock sig if disp
was specified as a value other than SIG_HOLD.
In versions of glibc before 2.5, sigset() does not correctly return the
previous disposition of the signal in two cases. First, if disp is
specified as SIG_HOLD, then a successful sigset() always returns
SIG_HOLD. Instead, it should return the previous disposition of the
signal (unless the signal was blocked, in which case SIG_HOLD should be
returned). Second, if the signal is currently blocked, then the return
value of a successful sigset() should be SIG_HOLD. Instead, the previ-
ous disposition of the signal is returned. These problems have been
fixed since glibc 2.5.
SEE ALSO
kill(2), pause(2), sigaction(2), signal(2), sigprocmask(2), raise(3),
sigpause(3), sigvec(3), feature_test_macros(7), signal(7)
COLOPHON
This page is part of release 3.22 of the Linux man-pages project. A
description of the project, and information about reporting bugs, can
be found at http://www.kernel.org/doc/man-pages/.
Linux 2009-03-15 SIGSET(3)