Manpages

名 前

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.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。