Manpages

名 前

signal − シ グ ナ ル の 概 要

説 明

Linux は POSIX 信 頼 シ グ ナ ル (reliable signal; 以 後 "標 準 シ グ ナ ル "と 表 記 ) と POSIX リ ア ル タ イ ム シ グ ナ ル の 両 方 に 対 応 し て い る 。 シ グ ナ ル 処 理 方 法 シ グ ナ ル は そ れ ぞ れ 現 在 の 「 処 理 方 法 (disposition)」 を 保 持 し て お り 、 こ の 処 理 方 法 に よ り シ グ ナ ル が 配 送 さ れ た 際 に プ ロ セ ス が ど の よ う な 振 舞 い を す る か が 決 ま る 。 後 述 の 表 の "動 作 " の 欄 の エ ン ト リ ー は 各 シ グ ナ ル の デ フ ォ ル ト の 処 理 方 法 を 示 し て お り 、 以 下 の よ う な 意 味 を 持 つ 。

Term デ フ ォ ル ト の 動 作 は プ ロ セ ス 終 了 。

Ign デ フ ォ ル ト の 動 作 は こ の シ グ ナ ル の 無 視 。

Core デ フ ォ ル ト の 動 作 は プ ロ セ ス 終 了 と コ ア ダ ン プ 出 力

(core(5) 参 照 )。

Stop デ フ ォ ル ト の 動 作 は プ ロ セ ス の 一 時 停 止 。

Cont デ フ ォ ル ト の 動 作 は 、 プ ロ セ ス が 停 止 中 の 場 合 に そ の

実 行 の 再 開 。 プ ロ セ ス は 、 sigaction(2)signal(2) を 使 っ て 、 シ グ ナ ル の 処 理 方 法 を 変 更 す る こ と が で き る (signal(2) の 方 が シ グ ナ ル ハ ン ド ラ ー を 設 定 す る 際 の 移 植 性 が 低 い ; 詳 細 は signal(2) を 参 照 )。 シ グ ナ ル の 配 送 時 に 起 こ る 動 作 と し て プ ロ セ ス が 選 択 で き る の は 、 次 の い ず れ か 一 つ で あ る 。 デ フ ォ ル ト の 動 作 を 実 行 す る 、 シ グ ナ ル を 無 視 す る 、 シ グ ナ ル ハ ン ド ラ ー (signal handler) で シ グ ナ ル を 捕 捉 す る 。 シ グ ナ ル ハ ン ド ラ ー と は 、 シ グ ナ ル 配 送 時 に 自 動 的 に 起 動 さ れ る プ ロ グ ラ マ 定 義 の 関 数 で あ る 。 (デ フ ォ ル ト で は 、 シ グ ナ ル ハ ン ド ラ ー は 通 常 の プ ロ セ ス の ス タ ッ ク 上 で 起 動 さ れ る 。 シ グ ナ ル ハ ン ド ラ ー が 代 替 ス タ ッ ク (alternate stack) を 使 用 す る よ う に 設 定 す る こ と も で き る 。 代 替 ス タ ッ ク を 使 用 す る よ う に 設 定 す る 方 法 と 、 ど の よ う な 際 に 代 替 ス タ ッ ク が 役 に 立 つ か に つ い て の 議 論 に つ い て は sigaltstack(2) を 参 照 の こ と 。 シ グ ナ ル の 処 理 方 法 は プ ロ セ ス 単 位 の 属 性 で あ る 。 マ ル チ ス レ ッ ド の ア プ リ ケ ー シ ョ ン で は 、 あ る シ グ ナ ル の 処 理 方 法 は 全 て の ス レ ッ ド で 同 じ で あ る 。

fork(2) 経 由 で 作 成 さ れ た 子 プ ロ セ ス は 、 親 プ ロ セ ス の シ グ ナ ル の 処 理 方 法 の コ ピ ー を 継 承 す る 。 execve(2) の 前 後 で 、 ハ ン ド ラ ー が 設 定 さ れ て い る シ グ ナ ル の 処 理 方 法 は デ フ ォ ル ト に リ セ ッ ト さ れ 、 無 視 が 設 定 さ れ て い る シ グ ナ ル の 処 理 方 法 は 変 更 さ れ ず そ の ま ま と な る 。 シ グ ナ ル の 送 信 以 下 の シ ス テ ム コ ー ル と ラ イ ブ ラ リ 関 数 を 使 っ て 、 呼 び 出 し 者 は シ グ ナ ル を 送 信 す る こ と が で き る 。

raise(3) 呼 び 出 し た ス レ ッ ド に シ グ ナ ル を 送 る 。

kill(2) 指 定 さ れ た プ ロ セ ス や 、 指 定 さ れ た プ ロ セ ス グ ル ー プ の 全 メ ン バ ー 、 シ ス テ ム の 全 プ ロ セ ス に シ グ ナ ル を 送 る 。

killpg(2) 指 定 さ れ た プ ロ セ ス グ ル ー プ の 全 メ ン バ ー に シ グ ナ ル を 送 る 。

pthread_kill(3) 呼 び 出 し 者 と 同 じ プ ロ セ ス 内 の 指 定 さ れ た

POSIX ス レ ッ ド に シ グ ナ ル を 送 る 。

tgkill(2) 指 定 さ れ た プ ロ セ ス 内 の 指 定 さ れ た ス レ ッ ド に シ グ ナ ル を 送 る

(こ の シ ス テ ム コ ー ル を 使 っ て pthread_kill(3) は 実 装 さ れ て い る )。

sigqueue(3) 指 定 さ れ た プ ロ セ ス に 付 属 デ ー タ と と も に リ ア ル タ イ ム シ グ ナ ル を 送 る 。 シ グ ナ ル が 捕 捉 さ れ る の を 待 つ 以 下 の シ ス テ ム コ ー ル を 使 っ て 、 シ グ ナ ル が 捕 捉 さ れ る ま で 呼 び 出 し た プ ロ セ ス や ス レ ッ ド の 実 行 を 中 断

(suspend) す る こ と が で き る (ハ ン ド ラ ー が 設 定 さ れ て い な い シ グ ナ ル に よ り そ の プ ロ セ ス が 終 了 し た 場 合 に も 実 行 の 停 止 は 終 了 す る )。

pause(2) 何 か シ グ ナ ル が 捕 捉 さ れ る ま で 実 行 を 停 止 す る 。

sigsuspend(2) 一 時 的 に シ グ ナ ル マ ス ク

(下 記 参 照 ) を 変 更 し 、 マ ス ク さ れ て い な い シ グ ナ ル の い ず れ か が 捕 捉 さ れ る ま で 実 行 を 中 断 す る 。 シ グ ナ ル の 同 期 受 信 シ グ ナ ル ハ ン ド ラ ー 経 由 で シ グ ナ ル を 非 同 期 (asynchronously) で 捕 捉 す る 以 外 に も 、 シ グ ナ ル を 同 期 (synchronously) し て 受 け 付 け る こ と も で き る 。 同 期 し て 受 け 付 け る と は 、 シ グ ナ ル が 配 送 さ れ る ま で 実 行 を 停 止 (block) す る と い う こ と で あ る 。 シ グ ナ ル を 受 け 付 け た 際 に 、 カ ー ネ ル は そ の シ グ ナ ル に 関 す る 情 報 を 呼 び 出 し 者 に 返 す 。 こ れ を 行 う 一 般 的 な 方 法 が 二 つ あ る 。

*

sigwaitinfo(2), sigtimedwait(2), sigwait(3) は 、 指 定 さ れ た シ グ ナ ル 集 合 の シ グ ナ ル の 一 つ が 配 送 さ れ る ま で 実 行 を 中 断 す る 。 ど の シ ス テ ム コ ー ル や 関 数 で も 、 配 送 さ れ た シ グ ナ ル に 関 す る 情 報 が 返 さ れ る 。

*

signalfd(2) が 返 す フ ァ イ ル デ ィ ス ク リ プ タ ー を 使 う と 、 呼 び 出 し 元 に 配 送 さ れ た シ グ ナ ル に 関 す る 情 報 を 読 み 出 す こ と が で き る 。 こ の フ ァ イ ル デ ィ ス ク リ プ タ ー か ら の read(2) は 、 signalfd(2) の 呼 び 出 し 時 に 指 定 さ れ た シ グ ナ ル 集 合 の シ グ ナ ル の 一 つ が 呼 び 出 し 元 に 配 送 さ れ る ま で 停 止 (block) す る 。 read(2) が 返 す バ ッ フ ァ ー に は シ グ ナ ル に 関 す る 情 報 を 格 納 し た 構 造 体 が 入 っ て い る 。

シ グ ナ ル マ ス ク と 処 理 待 ち シ グ ナ ル シ グ ナ ル は ブ ロ ッ ク (block) さ れ る こ と が あ る 。 ブ ロ ッ ク さ れ る と 、 そ の シ グ ナ ル は そ の 後 ブ ロ ッ ク を 解 除 さ れ る ま で 配 送 さ れ な く な る 。 シ グ ナ ル が 生 成 さ れ て か ら 配 送 さ れ る ま で の 間 、 そ の シ グ ナ ル は 処 理 待 ち (pending) で あ る と 呼 ば れ る 。 プ ロ セ ス 内 の 各 ス レ ッ ド は 、 そ れ ぞ れ 独 立 な シ グ ナ ル マ ス ク (signal mask) を 持 つ 。 シ グ ナ ル マ ス ク は そ の ス レ ッ ド が 現 在 ブ ロ ッ ク し て い る シ グ ナ ル 集 合 を 示 す も の で あ る 。 ス レ ッ ド は 、 pthread_sigmask(3) を 使 っ て 自 分 の シ グ ナ ル マ ス ク を 操 作 で き る 。 伝 統 的 な シ ン グ ル ス レ ッ ド の ア プ リ ケ ー シ ョ ン で は 、 sigprocmask(2) を 使 っ て 、 シ グ ナ ル マ ス ク を 操 作 で き る 。

fork(2) 経 由 で 作 成 さ れ た 子 プ ロ セ ス は 親 プ ロ セ ス の シ グ ナ ル マ ス ク の コ ピ ー を 継 承 す る 。 execve(2) の 前 後 で シ グ ナ ル マ ス ク は 保 持 さ れ る 。 生 成 さ れ る シ グ ナ ル (し た が っ て 処 理 待 ち と な る シ グ ナ ル ) に は 、 プ ロ セ ス 全 体 宛 て と 特 定 の ス レ ッ ド 宛 て が あ る 。 例 え ば 、 プ ロ セ ス 全 体 宛 て の シ グ ナ ル は kill(2) を 使 っ て 送 信 さ れ る 。 特 定 の マ シ ン 語 の 命 令 の 実 行 の 結 果 と し て 生 成 さ れ る 、 SIGSEGVSIGFPE な ど の シ グ ナ ル は 、 ス レ ッ ド 宛 て と な る 。 ま た 、 pthread_kill(3) を 使 っ て 特 定 の ス レ ッ ド 宛 て に 生 成 さ れ た シ グ ナ ル も ス レ ッ ド 宛 て と な る 。 プ ロ セ ス 宛 て の シ グ ナ ル は 、 そ の シ グ ナ ル を ブ ロ ッ ク し て い な い ス レ ッ ド の う ち い ず れ か の 一 つ に 配 送 す る こ と が で き る 。 そ の シ グ ナ ル を ブ ロ ッ ク し て い な い ス レ ッ ド が 複 数 あ る 場 合 、 シ グ ナ ル を 配 送 す る ス レ ッ ド は カ ー ネ ル が 無 作 為 に 選 択 す る 。 ス レ ッ ド は 、 sigpending(2) を 使 っ て 、 現 在 処 理 待 ち の シ グ ナ ル 集 合 を 取 得 す る こ と が で き る 。 こ の 集 合 は 、 プ ロ セ ス 宛 て の 処 理 待 ち シ グ ナ ル と 呼 び 出 し た ス レ ッ ド 宛 て の シ グ ナ ル の 両 方 か ら 構 成 さ れ る 。

fork(2) 経 由 で 作 成 さ れ た 子 プ ロ セ ス で は 、 処 理 待 ち の シ グ ナ ル 集 合 は 空 の 集 合 で 初 期 化 さ れ る 。 execve(2) の 前 後 で 、 処 理 待 ち の シ グ ナ ル 集 合 は 保 持 さ れ る 。 標 準 シ グ ナ ル
Linux は 以 下 に 示 す 標 準 シ グ ナ ル に 対 応 し て い る 。 シ グ ナ ル 番 号 の 一 部 は ア ー キ テ ク チ ャ ー 依 存 で あ り 、 "値 " 欄 に 示 す 通 り で あ る 。 (3つ の 値 が 書 か れ て い る も の は 、 1つ 目 が alpha と sparc で 通 常 有 効 な 値 、 真 ん 中 が x86, arm や 他 の ほ と ん ど の ア ー キ テ ク チ ャ ー で の 有 効 な 値 、 最 後 が mips で の 値 で あ る 。 (parisc で の 値 は 記 載 さ れ て い な い 。 parisc で の シ グ ナ ル 番 号 は Linux カ ー ネ ル ソ ー ス を 参 照 し て ほ し い )。 − は そ の ア ー キ テ ク チ ャ ー に お い て 対 応 す る シ グ ナ ル が な い こ と を 示 す 。 ) 最 初 に 、 POSIX.1−1990 に 定 義 さ れ て い る シ グ ナ ル を 示 す 。

シ グ ナ ル SIGKILLSIGSTOP は キ ャ ッ チ 、 ブ ロ ッ ク 、 無 視 で き な い 。 次 に 、 POSIX.1−1990 標 準 に は な い が 、 SUSv2 と POSIX.1−2001 に 記 述 さ れ て い る シ グ ナ ル を 示 す 。

Linux 2.2 以 前 で は 、 SIGSYS, SIGXCPU, SIGXFSZ お よ び SPARC と MIPS 以 外 の ア ー キ テ ク チ ャ ー で の SIGBUS の デ フ ォ ル ト の 振 る 舞 い は (コ ア ダ ン プ 出 力 な し の ) プ ロ セ ス 終 了 で あ っ た 。 (他 の UNIX シ ス テ ム に も SIGXCPUSIGXFSZ の デ フ ォ ル ト の 動 作 が コ ア ダ ン プ な し の プ ロ セ ス 終 了 の も の が あ る 。 ) Linux 2.4 で は 、 POSIX.1−2001 で の 要 求 仕 様 に 準 拠 し て 、 こ れ ら の シ グ ナ ル で 、 プ ロ セ ス を 終 了 さ せ 、 コ ア ダ ン プ を 出 力 す る よ う に な っ て い る 。 次 に そ の 他 の 各 種 シ グ ナ ル を 示 す 。

(シ グ ナ ル 29 は alpha で は SIGINFO / SIGPWR だ が 、 sparc で は SIGLOST で あ る 。 )

SIGEMT は POSIX.1−2001 に 規 定 さ れ て い な い が 、 そ の 他 の 多 く の UNIX シ ス テ ム に 存 在 す る 。 デ フ ォ ル ト の 動 作 は 多 く の 場 合 、 コ ア ダ ン プ 出 力 を 伴 う プ ロ セ ス の 終 了 で あ る 。

SIGPWR は (POSIX.1−2001 に 規 定 さ れ て い な い が ) こ の シ グ ナ ル が 存 在 す る 他 の UNIX シ ス テ ム で は 多 く の 場 合 、 デ フ ォ ル ト 動 作 は 無 視 で あ る 。

SIGIO は (POSIX.1−2001 に 規 定 さ れ て い な い が ) い く つ か の 他 の UNIX シ ス テ ム で は デ フ ォ ル ト 動 作 は 無 視 で あ る 。

SIGUNUSED が 定 義 さ れ て い る 場 合 に は 、 ほ と ん ど の ア ー キ テ ク チ ャ ー で SIGSYS の 同 義 語 と な っ て い る 。 リ ア ル タ イ ム シ グ ナ ル
Linux は リ ア ル タ イ ム シ グ ナ ル を サ ポ ー ト し て い る 。 リ ア ル タ イ ム シ グ ナ ル は 元 々 POSIX.1b の リ ア ル タ イ ム 拡 張 で 定 義 さ れ て い る も の で あ り 、 現 在 で は POSIX.1−2001 に 含 ま れ て い る 。 対 応 し て い る リ ア ル タ イ ム シ グ ナ ル の 範 囲 は 、 マ ク ロ SIGRTMINSIGRTMAX で 定 義 さ れ る 。 POSIX.1−2001 で は 、 少 な く と も _POSIX_RTSIG_MAX (8) 個 の リ ア ル タ イ ム シ グ ナ ル に 対 応 し た 実 装 が 要 求 さ れ て い る 。

Linux は 、 32 個 の 異 な る リ ア ル タ イ ム シ グ ナ ル に 対 応 し て お り 、 そ の 番 号 は 33 か ら 64 で あ る 。 し か し な が ら 、 glibc の POSIX ス レ ッ ド 実 装 は 、 内 部 で 2個 (NPTL の 場 合 ) か 3個 (LinuxThreads の 場 合 ) の リ ア ル タ イ ム シ グ ナ ル を 使 用 し て お り (pthreads(7) 参 照 )、 SIGRTMIN の 値 を 適 切 に (34 か 35 に ) 調 整 す る 。 利 用 可 能 な リ ア ル タ イ ム シ グ ナ ル の 範 囲 は glibc の ス レ ッ ド 実 装 に よ り 異 な る し (使 用 す る カ ー ネ ル と glibc に よ り 実 行 時 に も 変 化 す る )、 UNIX シ ス テ ム の 種 類 に よ っ て も 異 な る 。 し た が っ て 、 プ ロ グ ラ ム で は 「 ハ ー ド コ ー デ ィ ン グ し た 数 字 を 使 っ て の リ ア ル タ イ ム シ グ ナ ル の 参 照 は 決 し て す べ き で は な く 」 、 代 わ り に SIGRTMIN+n の 形 で 参 照 す べ き で あ る 。 ま た 、 SIGRTMIN+n が SIGRTMAX を 超 え て い な い か の チ ェ ッ ク を (実 行 時 に ) 適 切 に 行 う べ き で あ る 。 標 準 シ グ ナ ル と 異 な り 、 リ ア ル タ イ ム シ グ ナ ル に は 事 前 に 定 義 さ れ た 意 味 は な い 。 リ ア ル タ イ ム シ グ ナ ル の 全 部 を ア プ リ ケ ー シ ョ ン で 定 義 し た 用 途 に 使 え る 。 ハ ン ド リ ン グ し な い リ ア ル タ イ ム シ グ ナ ル の デ フ ォ ル ト の 動 作 は 受 信 し た プ ロ セ ス の 終 了 で あ る 。 リ ア ル タ イ ム シ グ ナ ル は 以 下 の 特 徴 が あ る :

1. リ ア ル タ イ ム シ グ ナ ル は 複 数 の 実 体 を キ ュ ー に 入 れ る こ と が で き る 。 一 方 、 標 準 シ グ ナ ル の 場 合 、 そ の シ グ ナ ル が ブ ロ ッ ク さ れ て い る 間 に 同 じ シ グ ナ ル の 複 数 の イ ン ス タ ン ス が 配 送 さ れ て も 、

1 つ だ け が キ ュ ー に 入 れ ら れ る 。

2. シ グ ナ ル が

sigqueue(3) を 用 い て 送 信 さ れ た 場 合 、 付 属 デ ー タ (整 数 か

ポ イ ン タ ー ) を シ グ ナ ル と 共 に 送 信 で き る 。 受 信 側 プ ロ セ ス が sigaction(2)SA_SIGINFO フ ラ グ を 指 定 し て シ グ ナ ル ハ ン ド ラ ー を 設 定 し た 場 合 、 こ の デ ー タ は siginfo_t 構 造 体 の si_value フ ィ ー ル ド 経 由 で ハ ン ド ラ ー の 第 2 引 き 数 と し て 渡 さ れ 、 利 用 す る こ と が で き る 。 さ ら に 、 こ の 構 造 体 の si_pidsi_uid フ ィ ー ル ド で シ グ ナ ル を 送 信 し た プ ロ セ ス の PID と 実 ユ ー ザ ー ID を 得 る こ と が で き る 。

3. リ ア ル タ イ ム シ グ ナ ル で は 配 送 さ れ る 順 序 が 保 証 さ れ る 。 同 じ タ イ プ の リ ア ル タ イ ム シ グ ナ ル は 送 信 さ れ た 順 番 に 到 着 す る 。 異 な る リ ア ル タ イ ム シ グ ナ ル が 一 つ の プ ロ セ ス に 送 信 さ れ た 場 合 、 番 号 の 小 さ い シ グ ナ ル か ら 先 に 到 着 す る 。

(つ ま り 小 さ い 番 号 の シ グ ナ ル が 高 い 優 先 順 位 を 持 つ 。 ) 対 照 的 に 、 一 つ の プ ロ セ ス に 対 し て 複 数 の 標 準 シ グ ナ ル が 処 理 待 ち と な っ た 場 合 、 こ れ ら の シ グ ナ ル が 配 送 さ れ る 順 序 は 不 定 で あ る 。 一 つ の プ ロ セ ス に 対 し て 標 準 シ グ ナ ル と リ ア ル タ イ ム シ グ ナ ル の 両 方 が 処 理 待 ち の 場 合 、 POSIX は ど ち ら が 先 に 配 送 さ れ る か を 規 定 し て い な い 。 Linux で は 、 他 の 多 く の 実 装 と 同 様 、 こ の よ う な 場 合 に は 標 準 シ グ ナ ル が 優 先 さ れ る 。

POSIX に よ れ ば 、 1 プ ロ セ ス 毎 に 最 低 _POSIX_SIGQUEUE_MAX (32) 個 の リ ア ル タ イ ム シ グ ナ ル を キ ュ ー に 入 れ ら れ る べ き と し て い る 。 し か し 、 Linux で は 違 っ た 実 装 に な っ て い る 。 カ ー ネ ル 2.6.7 ま で は (2.6.7 を 含 む )、 全 プ ロ セ ス で キ ュ ー に 入 っ て い る リ ア ル タ イ ム シ グ ナ ル の 数 の 合 計 に つ い て シ ス テ ム 全 体 で の 制 限 が あ る 。 こ の 制 限 は /proc/sys/kernel/rtsig−max フ ァ イ ル で 見 る こ と が で き 、 (権 限 が あ れ ば ) 変 更 も で き る 。 関 係 す る フ ァ イ ル と し て 、 /proc/sys/kernel/rtsig−nr を 見 る こ と で 、 い く つ の リ ア ル タ イ ム シ グ ナ ル が 現 在 キ ュ ー に 入 っ て い る か を 知 る こ と が で き る 。 Linux 2.6.8 で 、 こ れ ら の /proc 経 由 の イ ン タ ー フ ェ ー ス は 、 RLIMIT_SIGPENDING リ ソ ー ス 制 限 に 置 き 換 え ら れ た 。 こ れ は 、 キ ュ ー に 入 る シ グ ナ ル 数 に 関 し て ユ ー ザ ー 単 位 に 上 限 を 指 定 す る も の で あ る 。 詳 し く は setrlimit(2) を 参 照 。 非 同 期 シ グ ナ ル で 安 全 な 関 数 (async−signal−safe functions) シ グ ナ ル ハ ン ド ラ ー 関 数 に は 非 常 に 注 意 し な け れ ば な ら な い 。 他 の 場 所 の 処 理 は プ ロ グ ラ ム 実 行 の 任 意 の 箇 所 で 中 断 さ れ る 可 能 性 が あ る た め で あ る 。 POSIX に は 「 安 全 な 関 数 (safe function)」 と い う 概 念 が あ る 。 シ グ ナ ル が 安 全 で な い 関 数 の 実 行 を 中 断 し 、 か つ handler が 安 全 で な い 関 数 を 呼 び 出 し た 場 合 、 プ ロ グ ラ ム の 挙 動 は 未 定 義 で あ る 。

POSIX.1−2004 (POSIX.1−2001 Technical Corrigendum (正 誤 表 ) 2 と も 言 う ) で は 、 シ グ ナ ル ハ ン ド ラ ー 内 で の 安 全 な 呼 び 出 し を 保 証 す る こ と が 必 須 の 関 数 と し て 以 下 が 規 定 さ れ て い る 。

_Exit()
_exit()
abort()
accept()
access()
aio_error()
aio_return()
aio_suspend()
alarm()
bind()
cfgetispeed()
cfgetospeed()
cfsetispeed()
cfsetospeed()
chdir()
chmod()
chown()
clock_gettime()
close()
connect()
creat()
dup()
dup2()
execle()
execve()
fchmod()
fchown()
fcntl()
fdatasync()
fork()
fpathconf()
fstat()
fsync()
ftruncate()
getegid()
geteuid()
getgid()
getgroups()
getpeername()
getpgrp()
getpid()
getppid()
getsockname()
getsockopt()
getuid()
kill()
link()
listen()
lseek()
lstat()
mkdir()
mkfifo()
open()
pathconf()
pause()
pipe()
poll()
posix_trace_event()
pselect()
raise()
read()
readlink()
recv()
recvfrom()
recvmsg()
rename()
rmdir()
select()
sem_post()
send()
sendmsg()
sendto()
setgid()
setpgid()
setsid()
setsockopt()
setuid()
shutdown()
sigaction()
sigaddset()
sigdelset()
sigemptyset()
sigfillset()
sigismember()
signal()
sigpause()
sigpending()
sigprocmask()
sigqueue()
sigset()
sigsuspend()
sleep()
sockatmark()
socket()
socketpair()
stat()
symlink()
sysconf()
tcdrain()
tcflow()
tcflush()
tcgetattr()
tcgetpgrp()
tcsendbreak()
tcsetattr()
tcsetpgrp()
time()
timer_getoverrun()
timer_gettime()
timer_settime()
times()
umask()
uname()
unlink()
utime()
wait()
waitpid()
write()

POSIX.1−2008 で は 、 上 記 の リ ス ト の う ち fpathconf(), pathconf(), sysconf() が 削 除 さ れ 、 以 下 の 関 数 が 追 加 さ れ た 。

execl()
execv()
faccessat()
fchmodat()
fchownat()
fexecve()
fstatat()
futimens()
linkat()
mkdirat()
mkfifoat()
mknod()
mknodat()
openat()
readlinkat()
renameat()
symlinkat()
unlinkat()
utimensat()
utimes() シ グ ナ ル ハ ン ド ラ ー に よ る シ ス テ ム コ ー ル や ラ イ ブ ラ リ 関 数 へ の 割 り 込 み シ ス テ ム コ ー ル や ラ イ ブ ラ リ が 停 止 (block) し て い る 間 に シ グ ナ ル ハ ン ド ラ ー が 起 動 さ れ る と 、 以 下 の ど ち ら か と な る 。

* シ グ ナ ル が 返 っ た 後 、 呼 び 出 し は 自 動 的 に 再 ス タ ー ト さ れ る 。

* 呼 び 出 し は エ ラ ー

EINTR で 失 敗 す る 。 こ れ ら の 二 つ の 挙 動 の う ち ど ち ら が 起 こ る か は 、 イ ン タ ー フ ェ イ ス に よ り 依 存 し 、 シ グ ナ ル ハ ン ド ラ ー が SA_RESTART フ ラ グ (sigaction(2) 参 照 ) を 使 っ て 設 定 さ れ て い た か に も 依 存 す る 。 詳 細 は UNIX シ ス テ ム に よ っ て 異 な る 。 Linux に お け る 詳 細 を 以 下 で 説 明 す る 。 以 下 の イ ン タ ー フ ェ イ ス の い ず れ か の 呼 び 出 し が 停 止 し て い る 間 に シ グ ナ ル ハ ン ド ラ ー に よ り 割 り 込 ま れ た 場 合 、 SA_RESTART フ ラ グ が 使 用 さ れ て い れ ば 、 シ グ ナ ル ハ ン ド ラ ー が 返 っ た 後 に そ の 呼 び 出 し は 自 動 的 に 再 ス タ ー ト さ れ る こ と に な る 。 そ れ 以 外 の 場 合 は 、 そ の 呼 び 出 し は エ ラ ー EINTR で 失 敗 す る こ と に な る 。

*

read(2), readv(2), write(2), writev(2), ioctl(2) の 「 遅 い (slow)」 デ バ イ ス に 対 す る 呼 び 出 し 。 こ こ で い う 「 遅 い 」 デ バ イ ス と は 、 I/O 呼 び 出 し が 無 期 限 に 停 止 (block) す る 可 能 性 の あ る デ バ イ ス の こ と で 、 例 と し て は 端 末 、 パ イ プ 、 ソ ケ ッ ト が あ る (こ の 定 義 で は 、 デ ィ ス ク は 遅 い デ バ イ ス で は な い )。 eventfd(2), signalfd(2), timerfd(2), fanotify(7), inotify(7) の フ ァ イ ル デ ィ ス ク リ プ タ ー に 対 す る read(2) も 「 遅 い 」 操 作 と 考 え ら れ る 。 (Linux 3.8 よ り 前 で あ h , inotify(7) フ ァ イ ル デ ィ ス ク リ プ タ ー か ら の 読 み 出 し は 再 開 で き な か っ た 。 シ グ ナ ル ハ ン ド ラ ー に よ っ て 割 り 込 ま れ た 場 合 、 read(2) は 常 に エ ラ ー EINTR で 失 敗 し て い た 。 ) 遅 い デ バ イ ス に 対 す る I/O 呼 び 出 し が 、 シ グ ナ ル ハ ン ド ラ ー に よ り 割 り 込 ま れ た 時 点 ま で に 何 ら か の デ ー タ を す で に 転 送 し て い れ ば 、 呼 び 出 し は 成 功 ス テ ー タ ス (通 常 は 、 転 送 さ れ た バ イ ト 数 ) を 返 す こ と だ ろ う 。

*

停 止 (block) す る 可 能 性 の あ る open(2) (例 え ば 、 FIFO の オ ー プ ン 時 ; fifo(7) 参 照 )。
*

wait(2), wait3(2), wait4(2), waitid(2), waitpid(2).

*

ソ ケ ッ ト イ ン タ ー フ ェ イ ス : accept(2), connect(2), recv(2), recvfrom(2), recvmmsg(2), recvmsg(2), send(2), sendto(2), sendmsg(2). 但 し 、 ソ ケ ッ ト に タ イ ム ア ウ ト が 設 定 さ れ て い な い 場 合 (下 記 参 照 )。

*

フ ァ イ ル ロ ッ ク 用 イ ン タ ー フ ェ イ ス : flock(2), fcntl(2)F_SETLKWF_OFD_SETLKW 操 作 。
*

POSIX メ ッ セ ー ジ キ ュ ー イ ン タ ー フ ェ イ ス : mq_receive(3), mq_timedreceive(3), mq_send(3), mq_timedsend(3).

*

futex(2) FUTEX_WAIT (Linux 2.6.22 以 降 ; そ れ 以 前 は 常 に EINTR で 失 敗 し て い た )。

*

getrandom(2).

*

pthread_mutex_lock(3), pthread_cond_wait(3) と 関 連 API。

*

POSIX セ マ フ ォ イ ン タ ー フ ェ イ ス : sem_wait(3), sem_timedwait(3) (Linux 2.6.22 以 降 ; そ れ 以 前 は 常 に EINTR で 失 敗 し て い た )。

以 下 の イ ン タ ー フ ェ イ ス は 、 SA_RESTART を 使 っ て い る ど う か に 関 わ ら ず 、 シ グ ナ ル ハ ン ド ラ ー に よ り 割 り 込 ま れ た 後 、 再 ス タ ー ト す る こ と は 決 し て な い 。 こ れ ら は 、 シ グ ナ ル ハ ン ド ラ ー に よ り 割 り 込 ま れ る と 、 常 に エ ラ ー EINTR で 失 敗 す る 。

*

setsockopt(2) を 使 っ て タ イ ム ア ウ ト (SO_RCVTIMEO) が 設 定 さ れ て い る 「 入 力 」 ソ ケ ッ ト イ ン タ ー フ ェ ー ス : accept(2), recv(2), recvfrom(2), recvmmsg(2) (NULL 以 外 の timeout 引 き 数 も 指 定 さ れ て い る 場 合 ), recvmsg(2)

*

setsockopt(2) を 使 っ て タ イ ム ア ウ ト (SO_SNDTIMEO) が 設 定 さ れ て い る ソ ケ ッ ト イ ン タ ー フ ェ ー ス : connect(2), send(2), sendto(2), sendmsg(2)

*

シ グ ナ ル 待 ち に 使 わ れ る イ ン タ ー フ ェ イ ス : pause(2), sigsuspend(2), sigtimedwait(2), sigwaitinfo(2).

*

フ ァ イ ル デ ィ ス ク リ プ タ ー 多 重 イ ン タ ー フ ェ イ ス : epoll_wait(2), epoll_pwait(2), poll(2), ppoll(2), select(2), pselect(2).
*

System V IPC イ ン タ ー フ ェ イ ス : msgrcv(2), msgsnd(2), semop(2), semtimedop(2).

*

ス リ ー プ 用 の イ ン タ ー フ ェ イ ス : clock_nanosleep(2), nanosleep(2), usleep(3).
*

io_getevents(2).

sleep(3) 関 数 も 、 ハ ン ド ラ ー に よ り 割 り 込 ま れ た 場 合 、 決 し て 再 ス タ ー ト さ れ る こ と は な い 。 し か し 、 成 功 と な り 、 残 っ て い る 停 止 時 間 を 返 す 。 一 時 停 止 シ グ ナ ル に よ る シ ス テ ム コ ー ル や ラ イ ブ ラ リ 関 数 へ の 割 り 込 み
Linux で は 、 シ グ ナ ル ハ ン ド ラ ー が 設 定 さ れ て い な い 場 合 で も 、 い く つ か の ブ ロ ッ キ ン グ 型 の イ ン タ ー フ ェ イ ス は 、 プ ロ セ ス が 一 時 停 止 (stop) シ グ ナ ル の 一 つ に よ り 停 止 さ れ 、 SIGCONT に よ り 再 開 さ れ た 後 に 、 エ ラ ー EINTR で 失 敗 す る 可 能 性 が あ る 。 こ の 挙 動 は POSIX.1 で 認 め ら れ て お ら ず 、 他 の シ ス テ ム で は 起 こ ら な い 。 こ の 挙 動 を 示 す Linux の イ ン タ ー フ ェ イ ス は 以 下 の 通 り で あ る 。

*

setsockopt(2) を 使 っ て タ イ ム ア ウ ト (SO_RCVTIMEO) が 設 定 さ れ て い る 「 入 力 」 ソ ケ ッ ト イ ン タ ー フ ェ ー ス : accept(2), recv(2), recvfrom(2), recvmmsg(2) (NULL 以 外 の timeout 引 き 数 も 指 定 さ れ て い る 場 合 ), recvmsg(2)

*

setsockopt(2) を 使 っ て タ イ ム ア ウ ト (SO_SNDTIMEO) が 設 定 さ れ て い る ソ ケ ッ ト イ ン タ ー フ ェ ー ス : connect(2), send(2), sendto(2), sendmsg(2)

*

epoll_wait(2), epoll_pwait(2).

*

semop(2), semtimedop(2).

*

sigtimedwait(2), sigwaitinfo(2).

*

Linux 3.7 以 前 : inotify(7) フ ァ イ ル デ ィ ス ク リ プ タ ー か ら の read(2).

*

Linux 2.6.21 以 前 : futex(2) FUTEX_WAIT, sem_timedwait(3), sem_wait(3).

*

Linux 2.6.8 以 前 : msgrcv(2), msgsnd(2).

*

Linux 2.4 以 前 : nanosleep(2).

準 拠

POSIX.1 (注 記 し た 内 容 以 外 )。

関 連 項 目

kill(1), getrlimit(2), kill(2), killpg(2), restart_syscall(2), rt_sigqueueinfo(2), setitimer(2), setrlimit(2), sgetmask(2), sigaction(2), sigaltstack(2), signal(2), signalfd(2), sigpending(2), sigprocmask(2), sigreturn(2), sigsuspend(2), sigwaitinfo(2), abort(3), bsd_signal(3), longjmp(3), raise(3), pthread_sigqueue(3), sigqueue(3), sigset(3), sigsetops(3), sigvec(3), sigwait(3), strsignal(3), sysv_signal(3), core(5), proc(5), pthreads(7), sigevent(7)

こ の 文 書 に つ い て

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