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/ に書かれている。
Linux 2013-04-17 UNSHARE(2)