Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all
名前
unshare - プロセス実行コンテキストの一部を分離する
書式
#include <sched.h> int unshare(int flags); glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照): unshare(): glibc 2.14 以降: _GNU_SOURCE glibc 2.14 より前: _BSD_SOURCE || _SVID_SOURCE /* _GNU_SOURCE も定義される */
説明
unshare() を使うと、プロセスは他のプロセスと現在共有している 実行コンテキストの一部を分離 することができる。 実行コンテキストの一部、たとえばマウント名前空間 (mount namespace) な どは、新しいプロセスを fork(2) または vfork(2) を使って生成したときに、暗黙のうちに共有 される。 一方、仮想メモリなどは、 clone(2) を使ってプロセスを生成するときに、明示的に共有 することを要求できる。 unshare() の主な利用法は、プロセスが新しいプロセスを生成することなく、 共有実行コンテキス トを制御することである。 flags 引き数はビットマスクであり、 実行コンテキストのどの部分の共有を解除するかを表す。 こ の引き数は、以下の定数の 0 個以上の OR で指定する: CLONE_FILES clone(2) CLONE_FILES フラグの効果を取り消す。 ファイルディスクリプタテーブルを共有 させず、 呼び出し元プロセスは他のプロセスとファイルディスクリプタを共有しなくなる。 CLONE_FS clone(2) CLONE_FS フラグの効果を取り消す。ファイルシステム属性を共有させず、呼び出 し元プロセスは、ルートディレクトリ (chroot(2))、カレントディレクトリ (chdir(2))、 umask (umask(2)) を他のプロセスと共有しなくなる。 CLONE_NEWIPC (Linux 2.6.19 以降) このフラグは clone(2) CLONE_NEWIPC フラグと同じ効果を持つ。 System V IPC 名前空間を 共有せず、呼び出し元プロセスは 他のプロセスとは 共有しない固有の System V IPC 名前 空間のコピーを持つ。 このフラグを指定 すると、 CLONE_SYSVSEM も暗黙のうちに指定され る。 CLONE_NEWIPC を 使用するには CAP_SYS_ADMIN ケーパビリティが必要である。 CLONE_NEWNET (Linux 2.6.24 以降) このフラグは clone(2) CLONE_NEWNET フラグと同じ効果を持つ。ネット ワーク名前空間を 共有せず、呼び出し元プロセスは他のプロセスとは共有しな い固有のネットワーク名前空間 のコピーを持つ。CLONE_NEWNET を使用する には CAP_SYS_ADMIN ケーパビリティが必要であ る。 CLONE_NEWNS このフラグは clone(2) CLONE_NEWNS フラグと同じ効果を持つ。 マウン ト名前空間を共有 せず、呼び出し元プロセスは 他のプロセスとは共有しない固 有の名前空間のコピーを持 つ。 このフラグを指定すると、 CLONE_FS も暗 黙のうちに指定される。 CLONE_NEWNS を使 用するには CAP_SYS_ADMIN ケーパビリティが必要である。 CLONE_NEWUTS (Linux 2.6.19 以降) このフラグは clone(2) CLONE_NEWUTS フラグと同じ効果を持つ。 UTS IPC 名前空間を共有 せず、呼び出し元プロセスは他のプロセスとは共有しない 固有の UTS IPC 名前空間のコ ピーを持つ。 このフラグを指定すると、 CLONE_FS も暗黙のうちに指定され る。CLONE_NEWUTS を使用するには CAP_SYS_ADMIN ケーパビリティが必要である。 CLONE_SYSVSEM (Linux 2.6.26 以降) このフラグは clone(2) CLONE_SYSVSEM フラグの効果を逆転させる。 System V セマフォの アンドゥ値を共有せず、呼び出し元プロセスは 他のプロ セスとは共有しない固有のコピー を持つ。CLONE_SYSVSEM を使用するには CAP_SYS_ADMIN ケーパビリティが必要である。 flags に 0 が指定された場合、 unshare() は何も行わないので、 呼び出し元プロセスの実行コン テキストは、何も変更されない。
返り値
成功した場合は 0 が返される。 失敗した場合は -1 が返されて、 errno にはエラーを示す値が設 定される。
エラー
EINVAL flags に不正なビットが指定された。 ENOMEM 呼び出し元のコンテキストのうち共有を解除する必要がある部分をコピーするために、 十分 なメモリが確保できなかった。 EPERM 呼び出し元プロセスはこの操作を行うのに必要な特権を持っていなかった。
バージョン
unshare() システムコールは Linux カーネル 2.6.16 で追加された。
準拠
unshare() システムコールは Linux 固有である。
注意
clone(2) で新しいプロセスを生成したときに共有される全てのプロセス属性を、 unshare() に よって共有の解除ができるわけではない。 特に、カーネル 3.8 時点では、 unshare() に CLONE_SIGHAND, CLONE_THREAD, CLONE_VM の効果を取り消すためのフラグが実装されていない。 こ れらの機能は、必要であれば将来追加されるかもしれない。
関連項目
clone(2), fork(2), kcmp(2), setns(2), vfork(2) Linux カーネルソース内の Documentation/unshare.txt
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.54 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。