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 de noms, 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). Le principal intérêt de unshare() est de permettre à un processus de contrôler son contexte d'exécution partagé sans avoir à créer un nouveau processus. L'argument flags est un masque de bits qui indique quelles parties du contexte d'exécution ne doivent 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). Supprimer le partage de la table des descripteurs de fichier, ainsi, le processus appelant ne partagera plus ses descripteurs de fichier avec d'autres processus.

CLONE_FS
    Inverser l'effet de l'attribut CLONE_FS de clone(2). Supprimer le partage des 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 d'autres processus. Voir chroot(2), chdir(2) ou umask(2)

CLONE_NEWNS
    Cet attribut a le même effet que l'attribut CLONE_NEWNS de clone(2). Supprimer le partage de l'espace de noms, ainsi, le processus appelant a une copie privée de son espace de noms qui n'est pas partagée avec d'autres processus. L'utilisation de 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
Cet appel système renvoie 0 s'il réussit et -1 s'il échoue, auquel cas errno contient le code d'erreur.

ERREURS

EINVAL
    Un attribut invalide a été indiqué dans flags.

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

EPERM
    flags indiquait 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é au noyau Linux dans sa version 2.6.16.

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

NOTES
Tous les attributs de processus qui peuvent être partagés lorsqu'un nouveau processus est créé avec clone(2) ne peuvent pas être rendus privés avec 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 24 juin 2008.

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.