Manpages

名 前

kcmp − 二 つ の プ ロ セ ス が 同 じ カ ー ネ ル リ ソ ー ス を 共 有 し て い る か を 比 較 す る

書 式

#include <linux/kcmp.h>

int kcmp(pid_t pid1, pid_t pid2, int type,
unsigned long
idx1, unsigned long idx2); : こ の シ ス テ ム コ ー ル に は glibc の ラ ッ パ ー 関 数 は 存 在 し な い 。 「 注 意 」 の 節 を 参 照 。

説 明

シ ス テ ム コ ー ル kcmp() を 使 う と 、 ID が pid1pid2 の 二 つ の プ ロ セ ス が 、 仮 想 メ モ リ ー や フ ァ イ ル デ ィ ス ク リ プ タ ー な ど の 、 同 じ カ ー ネ ル リ ソ ー ス を 共 有 し て い る か ど う か を 検 査 で き る 。

type 引 き 数 は 2 つ の プ ロ セ ス 間 で ど の リ ソ ー ス を 比 較 す る か を 指 定 す る 。 以 下 の い ず れ か の 値 を 指 定 す る 。
KCMP_FILE
プ ロ セ ス pid1 の フ ァ イ ル デ ィ ス ク リ プ タ ー idx1 が 、 プ ロ セ ス pid2 の フ ァ イ ル デ ィ ス ク リ プ タ ー idx2 と 同 じ オ ー プ ン フ ァ イ ル 記 述 (open file description) を 参 照 し て い る か を 検 査 す る 。
KCMP_FILES
二 つ の プ ロ セ ス が 同 じ オ ー プ ン フ ァ イ ル 記 述 の 集 合 を 共 有 し て い る か を 検 査 す る 。 引 き 数 idx1idx2 は 無 視 さ れ る 。
KCMP_FS
二 つ の プ ロ セ ス が 同 じ フ ァ イ ル シ ス テ ム 情 報 (す な わ ち 、 フ ァ イ ル の モ ー ド 作 成 マ ス ク 、 作 業 デ ィ レ ク ト リ 、 フ ァ イ ル シ ス テ ム の ル ー ト ) を 共 有 し て い る か を 検 査 す る 。 引 き 数 idx1idx2 は 無 視 さ れ る 。
KCMP_IO
二 つ の プ ロ セ ス が I/O コ ン テ キ ス ト を 共 有 し て い る か を 検 査 す る 。 引 き 数 idx1idx2 は 無 視 さ れ る 。
KCMP_SIGHAND
二 つ の プ ロ セ ス が シ グ ナ ル 配 送 (disposition) テ ー ブ ル を 共 有 し て い る か を 検 査 す る 。 引 き 数 idx1idx2 は 無 視 さ れ る 。
KCMP_SYSVSEM
二 つ の プ ロ セ ス が 同 じ System V セ マ フ ォ undo 操 作 の リ ス ト を 共 有 し て い る か を 検 査 す る 。 引 き 数 idx1idx2 は 無 視 さ れ る 。
KCMP_VM
二 つ の プ ロ セ ス が 同 じ ア ド レ ス 空 間 を 共 有 し て い る か を 検 査 す る 。 引 き 数 idx1idx2 は 無 視 さ れ る 。

kcmp() に は 、 タ ス ク が 実 行 さ れ て い る 場 合 に 起 こ り 得 る 誤 判 定 (false positive) に 関 す る 保 護 は な い 。 と い う こ と は 、 意 味 の あ る 結 果 を 得 る た め に は 、 こ の シ ス テ ム コ ー ル で 検 査 を 行 う 前 に 、 SIGSTOP を 送 信 し て タ ス ク を 停 止 す べ き だ と い う こ と だ (signal(7) 参 照 )。

返 り 値

kcmp() の 呼 び 出 し が 成 功 し た 場 合 の 返 り 値 は 、 単 に カ ー ネ ル ポ イ ン タ ー を 数 値 で 比 較 し た 結 果 と な る (カ ー ネ ル は リ ソ ー ス を 比 較 す る 際 、 リ ソ ー ス の メ モ リ ー ア ド レ ス を 使 用 す る )。 こ れ を 説 明 す る に は 、 例 を 見 る の が 一 番 簡 単 で あ る 。 v1v2 を 適 切 な リ ソ ー ス の ア ド レ ス と す る と 、 返 り 値 は 以 下 の い ず れ か 一 つ と な る 。

0

v1v2 と 等 し い 。 言 い 換 え れ ば 、 二 つ の プ ロ セ ス は そ の リ ソ ー ス を 共 有 し て い る 。

1

v1v2 よ り 小 さ い 。

2

v1v2 よ り 大 き い 。

3

v1v2 と 等 し く な い が 、 順 序 情 報 が な い 。

エ ラ ー の 場 合 は −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。

kcmp() は 、 ソ ー ト に 適 し た 値 を 返 す よ う に 設 計 さ れ た 。 大 量 の フ ァ イ ル デ ィ ス ク リ プ タ ー を 比 較 す る 必 要 が あ る 場 合 に 、 特 に 役 に 立 つ 。

エ ラ ー

EBADF

typeKCMP_FILE で 、 か つ fd1fd2 が オ ー プ ン フ ァ イ ル 記 述 で な い 。

EINVAL

type が 無 効 で あ る 。

EPERM

プ ロ セ ス の リ ソ ー ス を 検 査 す る の に 十 分 な 許 可 が な い 。 自 分 が 所 有 し て い な い プ ロ セ ス を 検 査 す る た め に は CAP_SYS_PTRACE ケ ー パ ビ リ テ ィ が 必 要 で あ る 。

ESRCH

プ ロ セ ス pid1pid2 が 存 在 し な い 。

バ ー ジ ョ ン

kcmp() シ ス テ ム コ ー ル は Linux 3.5 で 初 め て 登 場 し た 。

準 拠

kcmp() は Linux 特 有 で あ り 、 移 植 を 考 慮 し た プ ロ グ ラ ム で は 使 用 す べ き で は な い 。

注 意

glibc は こ の シ ス テ ム コ ー ル に 対 す る ラ ッ パ ー 関 数 を 提 供 し て い な い 。 syscall(2) を 使 っ て 呼 び 出 す こ と 。 こ の シ ス テ ム コ ー ル が 利 用 で き る の は 、 カ ー ネ ル の CONFIG_CHECKPOINT_RESTORE オ プ シ ョ ン が 有 効 に な っ て い る 場 合 だ け で あ る 。 こ の シ ス テ ム コ ー ル の 主 な 用 途 は 、 ユ ー ザ ー 空 間 で の チ ェ ッ ク ポ イ ン ト /リ ス ト ア (checkpoint/restore in user space; CRIU) 機 能 で あ る 。 こ の シ ス テ ム コ ー ル を 使 わ な い と す る と 、 proc(5) フ ァ イ ル シ ス テ ム 経 由 で 必 要 な プ ロ セ ス 情 報 を 公 開 す る こ と に な る が 、 こ れ は セ キ ュ リ テ ィ 上 の 理 由 か ら 不 適 切 と み な さ れ た 。 こ の ペ ー ジ で 参 照 さ れ て い る 共 有 リ ソ ー ス に 関 す る 背 景 に つ い て の 情 報 は clone(2) を 参 照 の こ と 。

関 連 項 目

clone(2), unshare(2)

こ の 文 書 に つ い て

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