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.