UNSHARE
Section: Linux Programmer's Manual (2)
Updated: 2007-07-26
Index
JM Home Page
roff page
名前
unshare - プロセス実行コンテキストの一部を分離する
書式
#define _GNU_SOURCE
#include <sched.h>
int unshare(int flags);
説明
unshare()
を使うと、プロセスは他のプロセスと現在共有している
実行コンテキストの一部を分離することができる。
実行コンテキストの一部、たとえば名前空間などは、
新しいプロセスを
fork(2)
または
vfork(2)
を使って生成したときに、暗黙のうちに共有される。
一方、仮想メモリなどは、
clone(2)
を使ってプロセスを生成するときに、明示的に共有することを要求できる。
unshare()
の主な利用法は、プロセスが新しいプロセスを生成することなく、
共有実行コンテキストを制御することである。
flags
引き数はビットマスクであり、
実行コンテキストのどの部分の共有を解除するかを表す。
この引き数は、以下の定数の 0 個以上の OR で指定する:
- CLONE_FILES
-
clone(2)
CLONE_FILES
フラグの効果を取り消す。
ファイルディスクリプタテーブルを共有させず、
呼び出し元プロセスは他のプロセスとファイルディスクリプタを共有しなくなる。
- CLONE_FS
-
clone(2)
CLONE_FS
フラグの効果を取り消す。
ファイルシステム属性を共有させず、
呼び出し元プロセスは他のプロセスとルートディレクトリ・
カレントディレクトリ・umask 属性を共有しなくなる。
chroot(2),
chdir(2),
umask(2)
に影響する。
- CLONE_NEWNS
-
このフラグは
clone(2)
CLONE_NEWNS
フラグと同じ効果を持つ。
名前空間を共有せず、呼び出し元プロセスは
他のプロセスとは共有しない固有の名前空間のコピーを持つ。
このフラグを指定すると、
CLONE_FS
も暗黙のうちに指定される。
flags
に 0 が指定された場合、
unshare()
は何も行わないので、
呼び出し元プロセスの実行コンテキストは、何も変更されない。
返り値
成功した場合は 0 が返される。
失敗した場合は -1 が返されて、
errno
にはエラーを示す値が設定される。
エラー
- EINVAL
-
flags
に不正なビットが指定された。
- ENOMEM
-
呼び出し元のコンテキストのうち共有を解除する必要がある部分をコピーするために、
十分なメモリが確保できなかった。
- EPERM
-
flags
に
CLONE_NEWNS
が指定されたが、呼び出し元プロセスに特権
(CAP_SYS_ADMIN
ケーパビリティ) がなかった。
バージョン
unshare()
システムコールは Linux カーネル 2.6.16 で追加された。
準拠
unshare()
システムコールは Linux 固有である。
注意
clone(2)
で新しいプロセスを生成したときに共有される全てのプロセス属性を、
unshare()
によって共有の解除ができるわけではない。
特に、カーネル 2.6.16 においては、
unshare()
に
CLONE_SIGHAND,
CLONE_SYSVSEM,
CLONE_THREAD,
CLONE_VM
の効果を取り消すためのフラグが実装されていない。
これらの機能は、必要であれば将来追加されるかもしれない。
関連項目
clone(2),
fork(2),
vfork(2),
Documentation/unshare.txt
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- バージョン
-
- 準拠
-
- 注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:32:10 GMT, November 19, 2007