Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all bug

名前

       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)  に関する保護は
       ない。  ということは、 意味のある結果を得るためには、 このシステムコールで検査されているタ
       スクを停止すべきだということだ。

返り値

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