UNSHARE(2)

NOM
unshare - Dissocier les parties du contexte d'exécution d'un processus

SYNOPSIS
#define _GNU_SOURCE
#include <sched.h>

int unshare(int flags);

DESCRIPTION
unshare() permet à un processus de dissocier les parties de son contexte d'exécution qui sont actuellement partagées avec d'autres processus. Une partie du contexte d'exécution, comme l'espace nom, est implicitement partagée lorsqu'un processus est créé avec fork(2) ou vfork(2), pendant que d'autres parties, comme la mémoire virtuelle, peuvent être partagées par une demande explicite lors de la création d'un processus avec clone(2). La principale utilisation de unshare() est de permettre à un processus de contrôler son contexte d'exécution partagé sans créer de nouveau processus. L'argument flags est un masque de bits qui spécifie quelles parties du contexte d'exécution ne devraient pas être partagées. Cet argument est un OU binaire de zéro ou plusieurs des constantes suivantes :

CLONE_FILES
    Inverser l'effet de l'attribut CLONE_FILES de clone(2). Ne pas partager la table des descripteurs de fichier, ainsi, le processus appelant ne partagera plus ses descripteurs de fichiers avec les autres processus.

CLONE_FS
    Inverser l'effet de l'attribut CLONE_FS de clone(2). Ne pas partager les attributs du système de fichiers, ainsi, le processus appelant ne partagera plus son répertoire racine, son répertoire courant ou ses attributs umask avec les autres processus. chroot(2), chdir(2), ou umask(2)

CLONE_NEWNS
    Cet attribut a le même effet que l'attribut CLONE_NEWNS de clone(2). Ne pas partager l'espace nom, ainsi, le processus appelant a une copie privée de son espace nom qui n'est pas partagée avec les autres processus. Spécifier cet attribut implique automatiquement CLONE_FS.

Si flags vaut zéro, unshare() est une non-opération ; aucune modification ne sera effectuée dans le contexte d'exécution du processus.

VALEUR RENVOYÉE
S'il réussit, l'appel renvoie 0. S'il échoue, il renvoie -1 et écrit errno en conséquence.

ERREURS

EINVAL
    Un bit invalide a été spécifié dans flags.

ENOMEM
    Imposssible d'allouer suffisamment de mémoire pour copier les parties du contexte de l'appelant qui ne doivent pas être partagées.

EPERM
    flags spécifiait CLONE_NEWNS mais le processus appelant n'était pas privilégié (n'avait pas la capacité CAP_SYS_ADMIN).

VERSIONS
L'appel système unshare() a été ajouté à Linux dans le noyau 2.6.16.

CONFORMITÉ
L'appel système unshare() est spécifique à Linux.

NOTES
Ce ne sont pas tous les attributs du processus qui peuvent être partagés lorsqu'un nouveau processus est créé avec Not all of the process attributes that can be shared when a new process is created using clone(2) can be unshared using unshare(). En particulier, dans le noyau 2.6.16, unshare() n'implémente pas les attributs qui inverse les effets de CLONE_SIGHAND, CLONE_SYSVSEM, CLONE_THREAD ou CLONE_VM. De telles fonctionnalités pourront être ajoutées dans le futur, si cela est nécessaire.

VOIR AUSSI
clone(2), fork(2), vfork(2), Documentation/unshare.txt

TRADUCTION

Ce document est une traduction réalisée par Alain Portal <aportal AT univ-montp2 DOT fr> le 28 juillet 2006 et révisée le 22 décembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 unshare ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.