table of contents
UNSHARE(2) | Руководство программиста Linux | UNSHARE(2) |
ИМЯ¶
unshare - отделяет части процесса контекста выполнения
ОБЗОР¶
#define _GNU_SOURCE /* Смотрите feature_test_macros(7) */ #include <sched.h> int unshare(int flags);
ОПИСАНИЕ¶
Вызов unshare() позволяет процессу отделить части своего контекста выполнения, которые используются совместно с другими процессами. Часть контекста выполнения, например пространство имён монтирования, неявно делается общей при создании нового процесса с помощью fork(2) или vfork(2), в то время как другие части, такие как виртуальная память, могут стать общими по явному запросу при создании процесса с помощью clone(2).
Основное предназначение unshare() — позволить процессу контролировать свой общий контекст выполнения без создания нового процесса.
Значение аргумента flags представляет собой битовую маску, в которой указывается какие части контекста выполнения должны перестать быть общими. Значение составляется из нескольких следующих констант (через OR):
- CLONE_FILES
- Обратный эффект флагу CLONE_FILES для clone(2). Отделяет таблицу файловых дескрипторов таким образом, что вызывающий процесс больше не имеет общих файловых дескрипторов с другими процессами.
- CLONE_FS
- Обратный эффект флагу CLONE_FS для clone(2). Отделяет атрибуты файловой системы таким образом, что вызывающий процесс больше не имеет общих атрибутов корневого каталога, текущего каталога и umask с другими процессами (chroot(2), chdir(2) или umask(2)).
- CLONE_NEWIPC (начиная с Linux 2.6.19)
- Этот флаг имеет действие подобное флагу CLONE_NEWIPC для clone(2). Отделяет пространство имён System V IPC таким образом, что вызывающий процесс будет иметь свою личную копию пространства имён System V IPC, неиспользуемую другими процессами. Задание данного флага автоматически устанавливает флаг CLONE_SYSVSEM. Для использования CLONE_NEWIPC требуется мандат CAP_SYS_ADMIN.
- CLONE_NEWNET (начиная с Linux 2.6.24)
- Этот флаг имеет действие подобное флагу CLONE_NEWNET для clone(2). Отделяет сетевое пространство имён таким образом, что вызывающий процесс будет иметь свою личную копию сетевого пространства имён, неиспользуемую другими процессами. Для использования CLONE_NEWNET требуется мандат CAP_SYS_ADMIN.
- CLONE_NEWNS
- Этот флаг имеет действие подобное флагу CLONE_NEWNS для clone(2). Отделяет пространство имён монтирования таким образом, что вызывающий процесс будет иметь свою личную копию данного пространства имён, неиспользуемую другими процессами. Задание данного флага автоматически устанавливает флаг CLONE_FS. Для использования CLONE_NEWNS требуется мандат CAP_SYS_ADMIN.
- CLONE_SYSVSEM (начиная с Linux 2.6.26)
- Обратный эффект флагу CLONE_SYSVSEM для clone(2). Отделяет семафоры System V таким образом, что вызывающий процесс будет иметь свою личную копию, неиспользуемую другими процессами. Для использования CLONE_SYSVSEM требуется мандат CAP_SYS_ADMIN.
- CLONE_NEWUTS (начиная с Linux 2.6.19)
- Этот флаг имеет действие подобное флагу CLONE_NEWUTS для clone(2). Отделяет пространство имён UTS IPC таким образом, что вызывающий процесс будет иметь свою личную копию пространства имён UTS, неиспользуемую другими процессами. Для использования CLONE_NEWUTS требуется мандат CAP_SYS_ADMIN.
Если значение flags равно нулю, то unshare() ничего не делает, то есть в контексте выполнения вызывающего процесса ничего не изменяется.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении возвращается 0. При ошибке возвращается -1, а errno присваивается значение ошибки.
ОШИБКИ¶
ВЕРСИИ¶
Системный вызов unshare() был добавлен в ядро Linux версии 2.6.16.
СООТВЕТСТВИЕ СТАНДАРТАМ¶
Системный вызов unshare() есть только в Linux.
ЗАМЕЧАНИЯ¶
Не все атрибуты процесса, которые могут использоваться совместно при создании нового процесса с помощью clone(2), могут быть отделены с помощью unshare(). В частности, начиная с ядра 2.6.16 в unshare() не реализована поддержка флагов, которые были имели обратное действие CLONE_SIGHAND, CLONE_SYSVSEM, CLONE_THREAD или CLONE_VM. Эти возможности могут быть добавлены позднее, если потребуется.
СМОТРИТЕ ТАКЖЕ¶
2010-10-30 | Linux |