.\" -*- coding: UTF-8 -*-
.\" Copyright, the authors of the Linux man-pages project
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH pid_namespaces 7 "17 mai 2025" "Pages du manuel de Linux 6.15"
.SH NOM
pid_namespaces \- Présentation des espaces de noms d'identifiants de
processus (ou PID) sous Linux
.SH DESCRIPTION
Pour une présentation générale des espaces de noms, consultez
\fBnamespaces\fP(7).
.P
Les espaces de noms PID isolent les espaces de numéros d'identifiants de
processus, ce qui signifie que des processus de différents espaces de noms
PID peuvent avoir le même PID. Les espaces de noms PID permettent aux
conteneurs de fournir des possibilités telles que la suspension et la
reprise de l’ensemble des processus d’un conteneur et la migration du
conteneur vers un nouvel hôte tout en permettant aux processus du conteneur
de conserver leurs PID.
.P
Dans un nouvel espace de noms PID, la numérotation commence à 1 comme pour
un système autonome et les appels à \fBfork\fP(2), \fBvfork\fP(2) ou \fBclone\fP(2)
génèrent des identifiants de processus uniques dans l'espace de noms PID.
.P
.\"
.\" ============================================================
.\"
Le noyau doit avoir été configuré avec l'option \fBCONFIG_PID_NS\fP pour
permettre l'utilisation des espaces noms PID.
.SS "Le processus d'initialisation (init) de l'espace de noms"
Le premier processus créé dans un nouvel espace de noms (c'est\-à\-dire le
processus créé par \fBclone\fP(2) avec l'attribut \fBCLONE_NEWPID\fP ou le premier
processus enfant créé après un appel à \fBunshare\fP(2) avec l'attribut
\fBCLONE_NEWPID\fP) a pour PID 1. Il est le processus « init » pour l'espace de
noms (consultez \fBinit\fP(1)). Ce processus devient le parent pour n’importe
quel processus enfant qui devient orphelin parce qu’un processus résidant
dans cet espace de noms PID se termine (voir ci\-après pour plus de détails).
.P
Si le processus « init » d'un espace de noms PID se termine, le noyau tue
tous les processus de cet espace de noms au moyen du signal \fBSIGKILL\fP. Ce
comportement illustre le fait que le processus « init » est essentiel au bon
fonctionnement de l'espace de noms PID. Dans ce cas, une commande \fBfork\fP(2)
ultérieure dans cet espace de noms PID échouera en renvoyant l'erreur
\fBENOMEM\fP. Il n'est plus possible de créer des processus dans un espace de
noms PID dont le processus « init » est terminé. Cela peut, par exemple, se
produire lorsqu'un processus utilise un descripteur de fichier ouvert pour
un fichier \fI/proc/\fPpid\fI/ns/pid\fP correspondant à un processus d'un espace
de noms pour une réassociation (\fBsetns\fP(2)) dans cet espace de noms après
que le processus « init » soit terminé. Un autre scénario est possible après
un appel à \fBunshare\fP(2) : si le premier enfant créé par un appel à
\fBfork\fP(2) se termine, alors les appels ultérieurs à \fBfork\fP(2) échoueront
en renvoyant l'erreur \fBENOMEM\fP.
.P
Seuls les signaux pour lesquels le processus « init » a défini un
gestionnaire de signal peuvent être envoyés au processus « init » par les
autres processus de l'espace de noms PID. Cette règle s'applique également
aux processus disposant de privilèges et permet d'éviter qu'un processus
membre de l'espace de noms PID ne tue accidentellement le processus
« init ».
.P
De même, un processus d'un espace ancêtre peut \[em] en tenant compte des
vérifications de droits habituelles décrites dans \fBkill\fP(2) \[em] envoyer
des signaux au processus « init » d’un espace de noms enfant, à la condition
que le processus « init » ait établi un gestionnaire pour ce signal. Le
champ \fIsi_pid\fP de \fIsiginfo_t\fP décrit dans \fBsigaction\fP(2) pour ce
gestionnaire vaudra zéro. \fBSIGKILL\fP et \fBSIGSTOP\fP font figure d'exception :
ces signaux seront appliqués « de force » lorsqu'ils sont émis depuis un
espace de noms PID ancêtre. Ces signaux ne peuvent pas être interceptés par
le processus « init » et les actions associées à ces processus seront
exécutées (respectivement, tuer ou suspendre l'exécution du processus).
.P
.\"
.\" ============================================================
.\"
Depuis Linux 3.4, l’appel système \fBreboot\fP(2) déclenche l'envoi d'un signal
aux processus « init » des espaces de noms. Consultez \fBreboot\fP(2) pour
obtenir plus d'informations.
.SS "Imbrication des espaces de noms PID"
.\" commit f2302505775fd13ba93f034206f1e2a587017929
.\" The kernel constant MAX_PID_NS_LEVEL
Les espaces de noms PID peuvent être imbriqués : tous les espaces de noms
PID ont un parent, sauf l'espace de noms PID initial (« root »). Le parent
d'un espace de noms PID est l'espace de noms PID du processus qui a créé
l'espace de noms à l’aide de \fBclone\fP(2) ou \fBunshare\fP(2). Les espaces de
noms PID forment donc une arborescence dans laquelle chaque espace de noms
peut remonter jusqu'à l'espace « root ». Depuis Linux 3.7, le noyau limite
la profondeur maximale d’imbrication pour les espace de noms PID à 32.
.P
Un processus est visible de tous les processus de son espace de noms PID, et
de tous les processus des espaces de noms PID ancêtres qui le séparent de
l'espace PID « root ». Ici, on entend par « visible » qu'un autre processus
peut être la cible d’opérations d’un autre processus utilisant des appels
système qui précisent l’ID du processus. Inversement, les processus d'un
espace de noms PID enfant ne peuvent pas voir les processus de l’espace
parent et des espaces de noms ancêtre éloignés. En résumé, un processus peut
seulement voir (c'est\-à\-dire envoyer des signaux avec \fBkill\fP(2), définir
des valeurs de courtoisie avec \fBsetpriority\fP(2), etc.) les processus de son
propre espace de noms PID et des espaces de noms de sa descendance.
.P
Un processus a un identifiant dans chaque niveau de la hiérarchie des
espaces de noms PID dans lequel il est visible, et ce en remontant chaque
espace de noms ancêtre jusqu'à l'espace de noms PID « root ». Les appels
système qui s'exécutent sur des identifiants de processus s'appliquent à
l'identifiant du processus qui est visible dans l’espace de noms PID de
l'appelant. Un appel à \fBgetpid\fP(2) renvoie toujours le PID associé à
l'espace de noms dans lequel le processus a été créé.
.P
Certains processus d'un espace de noms PID peuvent avoir des parents en
dehors de cet espace. Par exemple, le parent du processus initial de
l'espace de noms (\fBinit\fP(1), processus dont le PID est 1) se trouve
forcément en dehors de cet espace. De même, l’enfant direct d'un processus
qui a invoqué \fBsetns\fP(2) pour que son enfant rejoigne un espace de noms
PID, se trouve dans un espace de noms PID différent de celui de l'appelant à
\fBsetns\fP(2). Les appels à \fBgetppid\fP(2) pour de tels processus
renvoient \fB0\fP.
.P
Alors que les processus peuvent descendre librement dans les espaces de noms
enfant (par exemple, en utilisant \fBsetns\fP(2) avec un descripteur de fichier
d’espace de noms PID), ils ne peuvent pas se déplacer dans l’autre
direction. Cela veut dire que les processus ne peuvent entrer dans aucun
espace de noms ancêtre (parent, grand\-parent, etc.). La modification
d’espace de noms PID est une opération à sens unique.
.P
.\"
.\" ============================================================
.\"
L’opération \fBNS_GET_PARENT\fP d’\fBioctl\fP(2) peut être utilisée pour découvrir
la relation parentale entre les espaces de noms PID. Consultez
\fBioctl_nsfs\fP(2).
.SS "Sémantiques de setns(2) et de unshare(2) "
Les appels à \fBsetns\fP(2) qui indiquent un descripteur de fichier d'un espace
de noms PID et les appels à \fBunshare\fP(2) avec l'attribut \fBCLONE_NEWPID\fP
font que les processus enfant qui seront créés par la suite seront placés
dans un espace de noms PID différent de celui de l'appelant. Depuis
Linux 4.12, cet espace de noms PID est affiché à l’aide du fichier
\fI/proc/\fPpid\fI/ns/pid_for_children\fP, comme décrit dans
\fBnamespaces\fP(7). Cependant, ces appels ne changent pas l’espace de noms PID
du processus appelant, parce que le faire modifierait la perception par
l'appelant de son propre PID (comme indiqué dans \fBgetpid\fP()), cassant de
nombreuses applications et bibliothèques.
.P
Pour présenter les choses différemment, l'appartenance d'un processus à un
espace de noms PID est déterminée lors de la création du processus et ne
peut plus être changée ensuite. Cela signifie que la relation parent\-enfant
entre processus reproduit la relation parentale entre des espaces de noms
PID : le parent d'un processus est soit dans le même espace de noms, soit
dans l'espace de noms PID du parent immédiat.
.P
.\"
.\" ============================================================
.\"
Un processus peut appeler \fBunshare\fP(2) avec l’indicateur \fBCLONE_NEWPID\fP
seulement une fois. Après avoir réalisé cette opération, son lien symbolique
\fI/proc/\fPpid\fI/ns/pid_for_children\fP sera vide jusqu’à la création du premier
enfant dans l’espace de noms.
.SS "Adoption d’un enfant orphelin"
.\" Furthermore, by definition, the parent of the "init" process
.\" of a PID namespace resides in the parent PID namespace.
.\"
.\" ============================================================
.\"
Quand un processus enfant devient orphelin, il est réapparenté au processus
« init » dans l’espace de noms PID de son parent (sinon un des ancêtres les
plus proches du parent employé dans la commande \fBPR_SET_CHILD_SUBREAPER\fP de
\fBprctl\fP(2) pour être marqué comme le récupérateur des processus de
descendants orphelins). Il est à noter qu’à cause des sémantiques de
\fBsetns\fP(2) et \fBunshare\fP(2) décrites ci\-dessus, cela peut être le processus
« init » dans l’espace de noms PID qui est le \fIparent\fP de l’espace de noms
PID de l’enfant, plutôt que le processus « init » dans le propre espace de
noms PID de l’enfant.
.SS "Compatibilité de CLONE_NEWPID avec les autres attributs CLONE_*"
Dans les versions actuelles de Linux, \fBCLONE_NEWPID\fP ne peut pas être
combiné avec \fBCLONE_THREAD\fP. Les threads doivent être dans le même espace
de noms PID de telle façon que les threads puissent s’envoyer des signaux
les uns aux autres. De la même façon, il doit être possible de voir tous les
threads d’un processus dans le système de fichiers \fBproc\fP(5). De plus, si
deux threads étaient dans des espaces de noms PID différents, l’ID de
processus du processus envoyant un signal ne pourrait pas être encodé
judicieusement lors de l’envoi d’un signal (consultez la description du type
\fIsiginfo_t\fP dans \fBsigaction\fP(2)). Puisque que cela a du sens lorsqu'un
signal est mis en file d’attente, une file de signaux partagée par des
processus dans plusieurs espaces de noms PID irait à l’encontre de cela.
.P
.\" Note these restrictions were all introduced in
.\" 8382fcac1b813ad0a4e68a838fc7ae93fa39eda0
.\" when CLONE_NEWPID|CLONE_VM was disallowed
.\" (restriction lifted in faf00da544045fdc1454f3b9e6d7f65c841de302)
.\" (restriction lifted in e79f525e99b04390ca4d2366309545a836c03bf1)
.\"
.\" ============================================================
.\"
De plus dans les premières versions de Linux, \fBCLONE_NEWPID\fP n’était pas
autorisé (échouant avec l’erreur \fBEINVAL\fP) en combinaison avec
\fBCLONE_SIGHAND\fP (avant Linux 4.3) ainsi que \fBCLONE_VM\fP (avant
Linux 3.12). Les modifications qui ont apporté ces restrictions ont été
aussi portées sur les précédents noyaux stables.
.SS "/proc et espaces de noms PID"
Un système de fichiers \fI/proc\fP ne présente (dans les répertoires
\fI/proc/\fPpid) que les processus visibles dans l'espace de noms PID du
processus qui a effectué le montage, même si le système de fichiers \fI/proc\fP
est vu par des processus appartenant à d'autres espaces de noms.
.P
Après la création d'un nouvel espace de noms PID, un enfant peut avoir
intérêt à changer son répertoire racine et à monter une nouvelle instance
procfs sur \fI/proc\fP afin d'assurer que des commandes comme \fBps\fP(1)
fonctionneront correctement. Si un nouvel espace de noms montage est créé
simultanément en invoquant \fBclone\fP(2) ou \fBunshare\fP(2) avec l'argument
\fBCLONE_NEWNS\fP, il n'est alors pas nécessaire de changer le répertoire
racine : une nouvelle instance procfs peut être montée directement dans
\fI/proc\fP.
.P
Depuis un interpréteur de commandes, la commande permettant de monter
\fI/proc\fP est :
.P
.in +4n
.EX
$ mount \-t proc proc /proc
.EE
.in
.P
.\"
.\" ============================================================
.\"
L'appel de \fBreadlink\fP(2) appliqué au chemin \fI/proc/self\fP affiche les
identifiants des processus de l'appelant dans l'espace de noms PID du
montage procfs (c'est\-à\-dire l'espace de noms PID du processus qui a monté
procfs). Cela peut être utile lorsque qu'un processus a besoin de connaître
son PID dans un autre espace de noms.
.SS "Fichiers /proc"
.TP
\fI/proc/sys/kernel/ns_last_pid\fP (depuis Linux 3.3)
.\" commit b8f566b04d3cddd192cfd2418ae6d54ac6353792
Ce fichier (virtualisé par espace de noms PID) affiche le dernier PID qui a
été alloué dans cet espace de noms PID. Quand le prochain PID est alloué, le
noyau recherchera le plus petit PID non alloué qui est supérieur à cette
valeur, et quand ce fichier est lu ultérieurement, il affiche ce PID.
.IP
.\" This ability is necessary to support checkpoint restore in user-space
.\"
.\" ============================================================
.\"
Un processus peut écrire sur ce fichier s’il a la capacité \fBCAP_SYS_ADMIN\fP
ou (depuis Linux 5.9) \fBCAP_CHECKPOINT_RESTORE\fP à l’intérieur de l’espace de
noms utilisateur qui possède l’espace de noms PID. Cela rend possible de
déterminer le PID qui est alloué au prochain processus créé dans cet espace
de noms PID.
.SS Divers
Lorsqu'un identifiant de processus est transmis à l’aide d’un socket de
domaine UNIX à un processus d'un autre espace de noms PID (consultez
\fBSCM_CREDENTIALS\fP dans \fBunix\fP(7)), il est transformé pour devenir le PID
correspondant dans l'espace de noms PID du processus recevant.
.SH STANDARDS
Linux.
.SH EXEMPLES
Consulter \fBuser_namespaces\fP(7).
.SH "VOIR AUSSI"
\fBclone\fP(2), \fBreboot\fP(2), \fBsetns\fP(2), \fBunshare\fP(2), \fBproc\fP(5),
\fBcapabilities\fP(7), \fBcredentials\fP(7), \fBmount_namespaces\fP(7),
\fBnamespaces\fP(7), \fBuser_namespaces\fP(7), \fBswitch_root\fP(8)
.PP
.SH TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess ,
Stéphan Rafin ,
Thierry Vignaud ,
François Micaux,
Alain Portal ,
Jean-Philippe Guérard ,
Jean-Luc Coulon (f5ibh) ,
Julien Cristau ,
Thomas Huriaux ,
Nicolas François ,
Florentin Duneau ,
Simon Paillard ,
Denis Barbier ,
David Prévot ,
Cédric Boutillier ,
Frédéric Hantrais
et
Jean-Paul Guillonneau
.
.PP
Cette traduction est une documentation libre ; veuillez vous reporter à la
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License version 3
.UE
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
.PP
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
.MT debian-l10n-french@lists.debian.org
.ME .