Man page - signal(2)

Packages contains this manual

Available languages:

en fr pl nl cs ja ru ro de

Manual

SIGNAL

名 前
書 式
説 明
返 り 値
エ ラ ー
準 拠
注 意
移 植 性
関 連 項 目
こ の 文 書 に つ い て

名 前

signal - ANSI C シ グ ナ ル 操 作

書 式

#include <signal.h>

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum , sighandler_t sighandler );

説 明

警 告 :
signal
() の 動 作 は UNIX の バ ー ジ ョ ン に よ り 異 な る 。 ま た 、 歴 史 的 に 見 て Linux の バ ー ジ ョ ン に よ っ て も 異 な っ て い る 。 こ の シ ス テ ム コ ー ル の 使 用 は 避 け 、 代 わ り に sigaction (2) を 使 用 す る こ と 。 下 記 の 「 移 植 性 」 を 参 照 。

signal () は シ グ ナ ル signum の 処 理 方 法 を handler に 設 定 す る 。 handler に は 、 SIG_IGN SIG_DFL 、 プ ロ グ ラ マ が 定 義 し た 関 数 (「 シ グ ナ ル ハ ン ド ラ ー 」 ) の ア ド レ ス の い ず れ か を 指 定 す る 。

シ グ ナ ル signum が プ ロ セ ス に 配 送 さ れ る と 、 以 下 の い ず れ か が 発 生 す る 。

*

処 理 方 法 が SIG_IGN に 設 定 さ れ て い る 場 合 、 そ の シ グ ナ ル は 無 視 さ れ る 。

*

処 理 方 法 が SIG_DFL に 設 定 さ れ て い る 場 合 、 シ グ ナ ル に 関 連 づ け ら れ た デ フ ォ ル ト の 動 作 が 行 わ れ る ( signal (7) 参 照 )。

*

処 理 方 法 と し て 関 数 が 設 定 さ れ て い る 場 合 、 ま ず 最 初 に 処 理 方 法 が SIG_DFL に リ セ ッ ト さ れ る か そ の シ グ ナ ル の ブ ロ ッ ク が 実 行 さ れ た 後 、 signum を 引 数 と し て handler が 呼 び 出 さ れ る 。 ハ ン ド ラ ー が 起 動 さ れ る 際 に シ グ ナ ル が ブ ロ ッ ク さ れ た 場 合 、 ハ ン ド ラ ー が 返 る 際 に そ の シ グ ナ ル の ブ ロ ッ ク が 解 除 さ れ る 。

シ グ ナ ル SIGKILL SIGSTOP は 捕 捉 で き ず 、 無 視 す る こ と も で き な い 。

返 り 値

signal () は 、 今 ま で の シ グ ナ ル ハ ン ド ラ ー の 値 を 返 す 。 エ ラ ー の 場 合 は SIG_ERR を 返 し 、 errno に エ ラ ー の 原 因 を 示 す 値 を 設 定 す る 。

エ ラ ー

EINVAL

signum が 不 正 で あ る 。

準 拠

POSIX.1-2001, POSIX.1-2008, C89, C99.

注 意

マ ル チ ス レ ッ ド プ ロ セ ス に お け る signal () の 結 果 は 、 指 定 さ れ て い な い 。

POSIX で は 、 kill (2) や raise (3) で 生 成 で き な い シ グ ナ ル SIGFPE , SIGILL , SIGSEGV を 無 視 (ignore) し た 場 合 、 そ の 後 の 動 作 は 未 定 義 で あ る 。 ゼ ロ に よ る 整 数 割 り 算 の 結 果 は 未 定 義 と な る 。 ア ー キ テ ク チ ャ ー に よ っ て は 、 こ の と き SIGFPE シ グ ナ ル が 生 成 さ れ る 。 (同 様 に 負 の 最 大 整 数 を -1 で 割 る と SIGFPE が 生 成 さ れ る か も し れ な い ) こ の シ グ ナ ル を 無 視 す る と 無 限 ル ー プ に 陥 る か も し れ な い 。

See sigaction (2) for details on what happens when the disposition SIGCHLD is set to SIG_IGN .

シ グ ナ ル ハ ン ド ラ ー 内 か ら 安 全 に 呼 び 出 す こ と が で き る 、 async-signal-safe functions (非 同 期 シ グ ナ ル で 安 全 な 関 数 ) の リ ス ト に つ い て は signal-safety (7) を 参 照 。

The use of sighandler_t is a GNU extension, exposed if _GNU_SOURCE is defined; glibc also defines (the BSD-derived) sig_t if _BSD_SOURCE (glibc 2.19 and earlier) or _DEFAULT_SOURCE (glibc 2.19 and later) is defined. Without use of such a type, the declaration of signal () is the somewhat harder to read:

void ( * signal (int signum , void (* handler )(int)) ) (int);

移 植 性

移 植 性 の あ る signal () の 使 い 方 は 、 シ グ ナ ル の 処 理 方 法 を SIG_DFL SIG_IGN に 設 定 す る 方 法 だ け で あ る 。 シ グ ナ ル ハ ン ド ラ ー を 設 定 す る の に signal () を 使 っ た と き の 動 作 は シ ス テ ム に よ り 異 な る (POSIX.1 は 明 示 的 に こ の 違 い を 認 め て い る )。 移 植 性 が 必 要 な と き は こ の シ ス テ ム コ ー ル を 使 用 し な い こ と 。

POSIX.1 は 、 sigaction (2) を 規 定 す る こ と で 移 植 性 に 関 す る 混 乱 を 解 決 し た 。 sigaction (2) は シ グ ナ ル ハ ン ド ラ ー が 起 動 さ れ る 際 の 挙 動 を 明 示 的 に 制 御 で き る 。 signal () の 代 わ り に こ の イ ン タ ー フ ェ イ ス を 使 う こ と 。

オ リ ジ ナ ル の UNIX シ ス テ ム で は 、 signal () を 使 っ て 設 定 さ れ た ハ ン ド ラ ー が シ グ ナ ル の 配 送 に よ り 起 動 さ れ る と 、 そ の シ グ ナ ル の 処 理 方 法 は SIG_DFL に リ セ ッ ト さ れ 、 シ ス テ ム は 同 じ シ グ ナ ル が さ ら に 生 成 さ れ て も シ グ ナ ル の 配 送 を ブ ロ ッ ク し な か っ た 。 こ れ は 、 以 下 の フ ラ グ で sigaction (2) を 呼 び 出 す の と 等 価 で あ る 。

sa.sa_flags = SA_RESETHAND | SA_NODEFER;

System V で も 、 signal () に 対 し て こ れ ら の 挙 動 を 規 定 し て い る 。 こ う し た 挙 動 は ま ず く 、 ハ ン ド ラ ー が ハ ン ド ラ ー 自 身 を 再 設 定 す る 機 会 が 来 る よ り 前 に 、 同 じ シ グ ナ ル が ま た 配 送 さ れ る 可 能 性 が あ る 。 さ ら に 、 同 じ シ グ ナ ル が 立 て 続 け に 配 送 さ れ る と 、 同 じ シ グ ナ ル が ハ ン ド ラ ー を 繰 り 返 し 起 動 さ れ る こ と に な る 。

BSD は こ の 状 況 が 改 善 し た が 、 残 念 な こ と に 、 そ の 過 程 で 既 存 の signal () の 挙 動 も 変 更 さ れ た 。 BSD で は 、 シ グ ナ ル ハ ン ド ラ ー が 起 動 さ れ た 際 、 シ グ ナ ル の 処 理 方 法 は リ セ ッ ト さ れ ず 、 ハ ン ド ラ ー の 実 行 中 は 、 同 じ シ グ ナ ル の さ ら な る 生 成 は 配 送 が ブ ロ ッ ク さ れ る 。 ま た 、 シ グ ナ ル ハ ン ド ラ ー が 中 断 さ れ た 場 合 、 停 止 中 の シ ス テ ム コ ー ル の い く つ か は 自 動 的 に 再 ス タ ー ト さ れ る 。 BSD の 挙 動 は 、 以 下 の フ ラ グ を 指 定 し た sigaction (2) の 呼 び 出 し と 等 価 で あ る 。

sa.sa_flags = SA_RESTART;

Linux で の 状 況 は 以 下 の 通 り で あ る 。

*

カ ー ネ ル の signal () シ ス テ ム コ ー ル は System V 方 式 を 提 供 し て い る 。

*

By default, in glibc 2 and later, the signal () wrapper function does not invoke the kernel system call. Instead, it calls sigaction (2) using flags that supply BSD semantics. This default behavior is provided as long as a suitable feature test macro is defined: _BSD_SOURCE on glibc 2.19 and earlier or _DEFAULT_SOURCE in glibc 2.19 and later. (By default, these macros are defined; see feature_test_macros (7) for details.) If such a feature test macro is not defined, then signal () provides System V semantics.

関 連 項 目

kill (1), alarm (2), kill (2), pause (2), sigaction (2), signalfd (2), sigpending (2), sigprocmask (2), sigsuspend (2), bsd_signal (3), killpg (3), raise (3), siginterrupt (3), sigqueue (3), sigsetops (3), sigvec (3), sysv_signal (3), signal (7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。