名 前
kcmp − 二 つ の プ ロ セ ス が 同 じ カ ー ネ ル リ ソ ー ス を 共 有 し て い る か を 比 較 す る
書 式
#include <linux/kcmp.h>
int
kcmp(pid_t pid1, pid_t pid2,
int type,
unsigned long idx1, unsigned long
idx2); 注 : こ の
シ ス テ ム コ ー
ル に は glibc の ラ ッ
パ ー 関 数 は 存
在 し な い 。 「
注 意 」 の 節 を
参 照 。
説 明
シ ス テ ム コ ー ル kcmp() を 使 う と 、 ID が pid1 と pid2 の 二 つ の プ ロ セ ス が 、 仮 想 メ モ リ ー や フ ァ イ ル デ ィ ス ク リ プ タ ー な ど の 、 同 じ カ ー ネ ル リ ソ ー ス を 共 有 し て い る か ど う か を 検 査 で き る 。
type
引 き 数 は 2 つ の
プ ロ セ ス 間 で
ど の リ ソ ー ス
を 比 較 す る か
を 指 定 す る 。
以 下 の い ず れ
か の 値 を 指 定
す る 。
KCMP_FILE プ ロ セ ス
pid1 の フ ァ イ ル
デ ィ ス ク リ プ
タ ー idx1 が 、 プ
ロ セ ス pid2 の フ
ァ イ ル デ ィ ス
ク リ プ タ ー idx2
と 同 じ オ ー プ
ン フ ァ イ ル 記
述 (open file description) を 参 照
し て い る か を
検 査 す る 。
KCMP_FILES 二 つ の プ ロ
セ ス が 同 じ オ
ー プ ン フ ァ イ
ル 記 述 の 集 合
を 共 有 し て い
る か を 検 査 す
る 。 引 き 数 idx1
と idx2 は 無 視 さ
れ る 。
KCMP_FS 二 つ の プ ロ
セ ス が 同 じ フ
ァ イ ル シ ス テ
ム 情 報 (す な わ
ち 、 フ ァ イ ル
の モ ー ド 作 成
マ ス ク 、 作 業
デ ィ レ ク ト リ
、 フ ァ イ ル シ
ス テ ム の ル ー
ト ) を 共 有 し て
い る か を 検 査
す る 。 引 き 数
idx1 と idx2 は 無 視
さ れ る 。
KCMP_IO 二 つ の プ ロ
セ ス が I/O コ ン テ
キ ス ト を 共 有
し て い る か を
検 査 す る 。 引
き 数 idx1 と idx2 は
無 視 さ れ る 。
KCMP_SIGHAND 二 つ の プ
ロ セ ス が シ グ
ナ ル 配 送 (disposition) テ
ー ブ ル を 共 有
し て い る か を
検 査 す る 。 引
き 数 idx1 と idx2 は
無 視 さ れ る 。
KCMP_SYSVSEM 二 つ の プ
ロ セ ス が 同 じ
System V セ マ フ ォ undo
操 作 の リ ス ト
を 共 有 し て い
る か を 検 査 す
る 。 引 き 数 idx1
と idx2 は 無 視 さ
れ る 。
KCMP_VM 二 つ の プ ロ
セ ス が 同 じ ア
ド レ ス 空 間 を
共 有 し て い る
か を 検 査 す る
。 引 き 数 idx1 と
idx2 は 無 視 さ れ
る 。
kcmp() に は 、 タ ス ク が 実 行 さ れ て い る 場 合 に 起 こ り 得 る 誤 判 定 (false positive) に 関 す る 保 護 は な い 。 と い う こ と は 、 意 味 の あ る 結 果 を 得 る た め に は 、 こ の シ ス テ ム コ ー ル で 検 査 を 行 う 前 に 、 SIGSTOP を 送 信 し て タ ス ク を 停 止 す べ き だ と い う こ と だ (signal(7) 参 照 )。
返 り 値
kcmp() の 呼 び 出 し が 成 功 し た 場 合 の 返 り 値 は 、 単 に カ ー ネ ル ポ イ ン タ ー を 数 値 で 比 較 し た 結 果 と な る (カ ー ネ ル は リ ソ ー ス を 比 較 す る 際 、 リ ソ ー ス の メ モ リ ー ア ド レ ス を 使 用 す る )。 こ れ を 説 明 す る に は 、 例 を 見 る の が 一 番 簡 単 で あ る 。 v1 と v2 を 適 切 な リ ソ ー ス の ア ド レ ス と す る と 、 返 り 値 は 以 下 の い ず れ か 一 つ と な る 。
0 |
v1 は v2 と 等 し い 。 言 い 換 え れ ば 、 二 つ の プ ロ セ ス は そ の リ ソ ー ス を 共 有 し て い る 。 | ||
1 |
v1 は v2 よ り 小 さ い 。 | ||
2 |
v1 は v2 よ り 大 き い 。 | ||
3 |
v1 は v2 と 等 し く な い が 、 順 序 情 報 が な い 。 |
エ ラ ー の 場 合 は −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。
kcmp() は 、 ソ ー ト に 適 し た 値 を 返 す よ う に 設 計 さ れ た 。 大 量 の フ ァ イ ル デ ィ ス ク リ プ タ ー を 比 較 す る 必 要 が あ る 場 合 に 、 特 に 役 に 立 つ 。
エ ラ ー
EBADF |
type が KCMP_FILE で 、 か つ fd1 か fd2 が オ ー プ ン フ ァ イ ル 記 述 で な い 。 | ||||||
EINVAL |
type が 無 効 で あ る 。
プ ロ セ ス の リ ソ ー ス を 検 査 す る の に 十 分 な 許 可 が な い 。 自 分 が 所 有 し て い な い プ ロ セ ス を 検 査 す る た め に は CAP_SYS_PTRACE ケ ー パ ビ リ テ ィ が 必 要 で あ る 。 プ ロ セ ス pid1 か pid2 が 存 在 し な い 。 バ ー ジ ョ ンkcmp() シ ス テ ム コ ー ル は Linux 3.5 で 初 め て 登 場 し た 。 準 拠kcmp() は Linux 特 有 で あ り 、 移 植 を 考 慮 し た プ ロ グ ラ ム で は 使 用 す べ き で は な い 。 注 意glibc は こ の シ ス テ ム コ ー ル に 対 す る ラ ッ パ ー 関 数 を 提 供 し て い な い 。 syscall(2) を 使 っ て 呼 び 出 す こ と 。 こ の シ ス テ ム コ ー ル が 利 用 で き る の は 、 カ ー ネ ル の CONFIG_CHECKPOINT_RESTORE オ プ シ ョ ン が 有 効 に な っ て い る 場 合 だ け で あ る 。 こ の シ ス テ ム コ ー ル の 主 な 用 途 は 、 ユ ー ザ ー 空 間 で の チ ェ ッ ク ポ イ ン ト /リ ス ト ア (checkpoint/restore in user space; CRIU) 機 能 で あ る 。 こ の シ ス テ ム コ ー ル を 使 わ な い と す る と 、 proc(5) フ ァ イ ル シ ス テ ム 経 由 で 必 要 な プ ロ セ ス 情 報 を 公 開 す る こ と に な る が 、 こ れ は セ キ ュ リ テ ィ 上 の 理 由 か ら 不 適 切 と み な さ れ た 。 こ の ペ ー ジ で 参 照 さ れ て い る 共 有 リ ソ ー ス に 関 す る 背 景 に つ い て の 情 報 は clone(2) を 参 照 の こ と 。 関 連 項 目こ の 文 書 に つ い てこ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。 |