NOM¶
credentials - Identifiants de processus
DESCRIPTION¶
Identifiant de processus (PID)¶
Chaque processus a un identifiant entier positif, qui lui est attribué
à sa création (avec
fork(2)). Un processus peut
connaître son PID avec
getpid(2). Un PID est
représenté par le type
pid_t (défini dans
<sys/types.h>).
Les PID sont utilisés dans un certain nombre d'appels système pour
identifier le processus affecté, par exemple :
kill(2),
ptrace(2),
setpriority(2),
setpgid(2),
setsid(2),
sigqueue(3) et
waitpid(2).
Le PID d'un processus est conservé travers d'un
execve(2).
Identifiant du processus père (PPID)¶
L'identifiant de processus père d'un processus identifie le processus qui
l'a créé avec
fork(2). Un processus peut connaître
son PPID avec
getppid(2). Un PPID est représenté à
l'aide du type
pid_t.
Le PPID d'un processus est conservé au travers d'un
execve(2).
Identifiant de groupe de processus et identifiant de session¶
Chaque processus a un identifiant de session et un identifiant de groupe de
processus, tous deux représentés par le type
pid_t. Un
processus peut connaître son identifiant de session avec
getsid(2), et son identifiant de groupe de processus avec
getpgrp(2).
Un processus créé par
fork(2) hérite de
l'identifiant de session et de l'identifiant de groupe de processus de son
père. Les identifiants de session et de groupe de processus sont
préservés par
execve(2).
Les sessions et les groupes de processus sont des abstractions destinées
à aider le contrôle des tâches dans le shell. Un groupe
de processus (parfois appelé
« tâche ») est un ensemble de processus
ayant le même identifiant de groupe de processus ; le shell
crée un nouveau groupe de processus pour exécuter une commande
ou pipeline (par exemple, les deux processus créés pour
exécuter la commande
« ls | wc » sont placés dans
le même groupe de processus). L'appartenance à un groupe de
processus peut être changée avec
setpgid(2). Le processus
dont le PID est égal à son identifiant de groupe de processus
est le
leader du groupe de processus.
Une session est un ensemble de processus ayant le même identifiant de
session. Tous les membres d'un groupe de processus ont également le
même identifiant de session (tous les membres d'un groupe de processus
appartiennent à la même session, donc les sessions et les
groupes de processus forment une hiérarchie à deux niveaux). Une
nouvelle session est créée lorsqu'un processus appelle
setsid(2), qui crée une nouvelle session dont l'identifiant est
le PID de ce processus. Le créateur de cette session est appelé
leader de session.
Tous les processus d'une session partagent un
terminal de
contrôle. Le terminal de contrôle est créé
lorsque le leader de session ouvre un terminal pour la première fois
(sauf si le paramètre
O_NOCTTY est précisé lors de
l'appel de
open(2)). Un terminal ne peut être le terminal de
contrôle que d'une seule session.
Il ne peut y avoir plus d'une tâche ayant la place de
« tâche de premier plan » ; les
autres tâches de la sessions sont des « tâches
d'arrière plan ». Seul la tâche de premier plan
peut recevoir des informations depuis le terminal ; si un job
d'arrière plan tente de recevoir des informations du terminal, le
signal
SIGTTIN est renvoyé au groupe du processus, ce qui a pour
effet de suspendre la tâche. Si le terminal a reçu l'attribut
TOSTOP (consultez
termios(3)), alors seule la tâche de
premier plan est autorisée à afficher des données dans le
terminal ; l'envoi de données d'une tâche
d'arrière plan vers le terminal déclenche un signal
SIGTTOU, ce qui a pour effet de suspendre la tâche. Lorsqu'une
touche du clavier qui génère un signal est enfoncée (par
exemple la touche
interrupt, qui provoque normalement un control-C), le
signal est envoyé au processus de premier plan.
Divers appels système ou fonctions de bibliothèque peuvent agir
sur tous les membres d'un groupe de processus, notamment
kill(2),
killpg(2),
getpriority(2),
setpriority(2),
ioprio_get(2),
ioprio_set(2),
waitid(2) et
waitpid(2). Consultez également la discussion au sujet de
F_GETOWN,
F_GETOWN_EX,
F_SETOWN et les opérations
F_SETOWN_EX de
fcntl(2).
Identifiants d'utilisateur et de groupe¶
Chaque processus a un certain nombre d'identifiants d'utilisateur et de groupe.
Ces identifiants sont des entiers représentés respectivement
avec les types
uid_t et
gid_t (définis dans
<sys/types.h>).
Sous Linux, chaque processus a les identifiants d'utilisateur et de groupe
suivants :
- *
- Identifiant d'utilisateur réel et identifiant de groupe
réel. Ces identifiants déterminent le propriétaire du
processus. Un processus peut déterminer ses UID et GID réels
avec getuid(2) et getgid(2).
- *
- UID effectif et GID effectif. Ces identifiants sont utilisés par le
noyau pour déterminer les permissions de ce processus lors
d'accès à des ressources partagées telles que les
files de messages, la mémoire partagée ou les
sémaphores. Sur la plupart des systèmes UNIX, ces
identifiants déterminent aussi les permissions d'accès aux
fichiers. Cependant, Linux utilise l'identifiant d'utilisateur du
système de fichiers (décrit ci‐dessous) pour cette
tâche. Un processus peut déterminer son UID (GID) effectif
avec geteuid(2) (getegid(2)).
- *
- UID sauvé et GID sauvé. Ces identifiants sont
utilisés dans les programmes set-user-ID et set-group-ID pour
sauvegarder une copie des identifiants effectifs correspondants lors de
l'exécution du programme (consultez execve(2)). Un programme
set-user-ID peut prendre et abandonner des privilèges en changeant
son UID effectif entre les valeurs de ses UID réel et sauvé.
Cet échange est réalisé par les appels système
seteuid(2), setreuid(2) ou setresuid(2). Un programme
set-group-ID peut effectuer les opérations correspondantes avec
setegid(2), setregid(2) ou setresgid(2). Un processus
peut obtenir son UID (resp. GID) sauvé avec
getresuid(2) (resp. getresgid(2)).
- *
- UID et GID du système de fichiers (spécifiques à
Linux). Ces identifiants, ainsi que les identifiants de groupe
additionnels décrits plus bas, sont utilisés pour
déterminer les permissions d'accès aux fichiers ;
consultez path_resolution(7) pour plus de détails. Lorsque
l'UID (ou GID) effectif d'un processus est modifié, le noyau
définit automatiquement l'UID (ou GID) du système de
fichiers à la même valeur. Ainsi, les identifiants du
système de fichiers sont en général égaux aux
identifiants effectifs, et la sémantique des vérifications
de permissions sont les mêmes sous Linux et sous les autres UNIX.
Les identifiants du système de fichiers peuvent prendre une valeur
différente des identifiants effectifs en utilisant les appels
setfsuid(2) et setfsgid(2).
- *
- GID additionnels. Il s'agit d'un ensemble d'identifiants de groupe qui
sont utilisés pour les vérifications de permissions
d'accès aux fichiers et autres ressources partagées. Sous
les noyaux antérieurs à 2.6.4, un processus pouvait avoir
jusqu'à 32 groupes additionnels ; depuis le
noyau 2.6.4, cette limite est de 65536 groupes additionnels.
L'appel sysconf(_SC_NGROUPS_MAX) peut être utilisé
pour déterminer le nombre de groupes additionnels auxquels un
processus peut appartenir. Un processus peut consultez son ensemble de GID
additionnels avec getgroups(2), et le modifier avec
setgroups(2).
Un processus fils créé par
fork(2) hérite des copies
des UID et GID de son père. Lors d'un
execve(2), les UID et GID
réels ainsi que les GID supplémentaires sont
préservés ; les identifiants effectifs et sauvés
peuvent être modifiés comme indiqué dans
execve(2).
En dehors des contextes décrits ci‐dessus, les UID d'un processus
sont également utilisés dans les cas suivants :
- *
- lors de la vérification des permissions pour l'envoi de signaux
— consultez kill(2) ;
- *
- lors de la vérification des permissions pour la modification des
paramètres d'ordonnancement (politesse, politique et
priorité d'ordonnancement temps‐réel, priorité
d'E/S) avec setpriority(2), sched_setaffinity(2),
sched_setscheduler(2), sched_setparam(2) et
ioprio_set(2) ;
- *
- lors de la vérification de limites de ressources ; consultez
getrlimit(2) ;
- *
- lorsque la limite du nombre d'instances inotify que le processus peut
créer est vérifiée ; consultez
inotify(7).
Les PID, PPID, PGID et SID sont spécifiés dans POSIX.1-2001. Les
identifiants réels, effectifs et sauvés, et les identifiants de
groupe additionnels sont spécifiés dans POSIX.1-2001. Les
identifiants du système de fichiers sont une extension Linux.
NOTES¶
La spécification POSIX des threads demande que les identifiants soient
partagés par tous les threads d'un processus. Toutefois, au niveau du
noyau, Linux maintient des identifiants d'utilisateurs et de groupes
séparés pour chaque thread. L'implémentation des threads
NPTL effectue un certain travail pour s'assurer que toute modification
d'identifiants d'utilisateur ou de groupe (par exemple, via des appels
à
setuid(2) ou
setresuid(2)) soit propagée vers
tous les threads POSIX d'un processus.
VOIR AUSSI¶
bash(1),
csh(1),
ps(1),
access(2),
execve(2),
faccessat(2),
fork(2),
getpgrp(2),
getpid(2),
getppid(2),
getsid(2),
kill(2),
killpg(2),
setegid(2),
seteuid(2),
setfsgid(2),
setfsuid(2),
setgid(2),
setgroups(2),
setresgid(2),
setresuid(2),
setuid(2),
waitpid(2),
euidaccess(3),
initgroups(3),
tcgetpgrp(3),
tcsetpgrp(3),
capabilities(7),
path_resolution(7),
signal(7),
unix(7)
COLOPHON¶
Cette page fait partie de la publication 3.65 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Julien Cristau et l'équipe francophone de traduction de
Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce
document en utilisant la commande «
man -L C
<section>
<page_de_man> ».