unshare() - Unix,Linux 系统调用
Tutorials Point


  Unix 初学者指南
  Unix Shell 编程
  高级 Unix
  Unix 有用参考
  Unix 有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考资料     讨论区     关于 TP  

unshare() - Unix,Linux 系统调用


previous next AddThis Social Bookmark Button

广告

名称

unshare - 取消进程执行上下文的部分关联

概要

#include <sched.h> 

int unshare(int flags);

描述

unshare() 允许进程取消其当前与其他进程共享的执行上下文的部分关联。例如命名空间之类的执行上下文的一部分在使用 fork(2) 或 vfork(2) 创建新进程时隐式共享,而其他部分,例如虚拟内存,则可能在使用 clone(2) 创建进程时通过显式请求共享。

unshare() 的主要用途是允许进程控制其共享执行上下文,而无需创建新进程。

flags 参数是一个位掩码,用于指定应取消共享执行上下文的哪些部分。此参数通过将以下常量中的零个或多个常量进行 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 指定为零,则 unshare() 为无操作;不会对调用进程的执行上下文进行任何更改。

返回值

成功时返回零。失败时返回 -1,并设置 errno 以指示错误。

错误

标签描述
EPERM flags 指定了 CLONE_NEWNS,但调用进程没有特权(没有 CAP_SYS_ADMIN 功能)。
ENOMEM 无法分配足够的内存来复制需要取消共享的调用者上下文的各个部分。
EINVAL flags 中指定了无效位。

符合标准

unshare() 系统调用是 Linux 特定的。

备注

unshare() 系统调用是在 Linux 内核 2.6.16 中添加的。

并非所有在使用 clone(2) 创建新进程时可以共享的进程属性都可以使用 unshare() 取消共享。特别是,在内核 2.6.16 中,unshare() 没有实现反转 CLONE_SIGHANDCLONE_SYSVSEMCLONE_THREADCLONE_VM 效果的标志。如果需要,将来可能会添加此类功能。

参见



previous next Printer Friendly

广告


  

广告



广告