NOM
setpgid, getpgid, setpgrp, getpgrp - Fixer/lire le groupe du processus
SYNOPSIS
#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
pid_t getpgid(pid_t pid);
pid_t getpgrp(void); /* version POSIX.1 */
pid_t getpgrp(psid_t pid); /* version BSD */
int setpgrp(void); /* version System V */
int setpgrp(pid_t pid, pid_t pgid); /* version BSD */
Exigences de macros de test de fonctionnalités pour la glibc (voir
feature_test_macros(7)) :
getpgid() : _XOPEN_SOURCE >= 500
setpgrp() (POSIX.1) : _SVID_SOURCE || _XOPEN_SOURCE >= 500
setpgrp() (BSD), getpgrp() (BSD) : _BSD_SOURCE && ! (_POSIX_SOURCE ||
_POSIX_C_SOURCE || _XOPEN_SOURCE || _XOPEN_SOURCE_EXTENDED ||
_GNU_SOURCE || _SVID_SOURCE)
Toutes ces interfaces sont disponibles sous Linux et sont utilisées
pour récupérer et fixer l’ID du groupe de processus (PGID : « Process
Group ID ») d’un processus. La façon préférée, celle spécifiée par
POSIX.1 est : getpgrp(void) pour récupérer le PGID du processus
appelant et setpgid() pour fixer le PGID d’un processus.
setpgid() fixe à pgid le PGID du processus mentionné par pid. Si pid
vaut zéro, alors le PID du processus appelant est utilisé. Si pgid vaut
zéro, alors le PGID du processus indiqué par pid est positionné à la
même valeur que l’identifiant du processus. Si setpgid est utilisé pour
déplacer un processus d’un groupe dans un autre (comme cela peut être
fait par certains shell pour les pipelines), les deux groupes de
processus doivent appartenir à la même session (consultez setsid(2) et
credentials(7)). Dans ce cas, pgid indique un groupe de processus
existant à rejoindre et l’ID de session de ce groupe doit être celui du
processus concerné.
La version POSIX.1 de getpgrp(), qui ne prend pas de paramètre, renvoie
le PGID du processus appelant.
getpgid() renvoie le PGID du processus indiqué par pid. Si pid vaut
zéro, le PID du processus appelant est utilisé. La récupération du PGID
d’un processus autre que l’appelant est rarement utilisée et getpgrp()
est préférée pour cette tâche.
L’appel setpgrp() de System V, qui ne prend pas de paramètre, est
équivalent à setpgid(0, 0).
L’appel setpgrp() spécifique à BSD qui prend des paramètres pid et pgid
est équivalent à setpgid(pid, pgid).
L’appel getpgrp() spécifique à BSD qui prend un unique paramètre pid
est équivalent à getpgid(pid).
VALEUR RENVOYÉE
setpgid() et setpgrp() renvoient zéro s’ils réussissent, ou -1 s’ils
échouent, auquel cas errno contient le code d’erreur.
L’appel getpgrp() de POSIX.1 renvoie le PGID du processus appelant.
getpgid() et l’appel spécifique à BSD getpgrp() renvoient le groupe du
processus s’il réussit. En cas d’erreur -1 est renvoyé et errno
contient le code d’erreur.
ERREURS
EACCES On a essayé de changer le groupe de processus d’un enfant du
processus appelant, et ce fils a déjà effectué un execve(2)
(setpgid(), setpgrp()).
EINVAL pgid est inférieur à 0 (setpgid(), setpgrp()).
EPERM On a essayé de déplacer un processus dans un groupe d’une
session différente, ou de changer le groupe d’un fils du
processus appelant qui se trouve dans une autre session, ou de
modifier le groupe d’un leader de session (setpgid(),
setpgrp()).
ESRCH Pour getpgid() : pid ne correspond à aucun processus. Pour
setpgid() : pid n’est ni le processus appelant, ni l’un de ses
enfants.
CONFORMITÉ
setpgid() et la version de getpgrp() sans paramètre sont conformes à
POSIX.1-2001.
POSIX.1-2001 spécifie également getpgid() et la version de setpgrp()
qui ne prend pas de paramètre. (POSIX.1-2008 marque cette spécification
de setpgrp() comme obsolète)
La version de getpgrp() avec un paramètre et la version de setpgrp()
qui prend deux paramètres provient de BSD 4.2 et ne sont pas spécifiées
par POSIX.1.
NOTES
Un processus fils créé par fork(2) hérite du PGID de son père. Le PGID
est conservé au travers d’un execve(2).
Chaque groupe de processus est membre d’une session et chaque processus
est membre de cette session.
Une session peut avoir un terminal de contrôle. À tout moment, un (et
un seul) des groupes de processus de cette session peut être le groupe
de premier plan du terminal ; les autre groupes de processus sont en
arrière plan. Si un signal est généré depuis le terminal (par exemple
une touche d’interruption pour générer un SIGINT), ce signal est envoyé
au groupe de processus au premier plan. Consultez termios(3) pour la
liste des caractères qui génèrent des signaux. Seul le groupe de
processus au premier plan peut lire avec read(2) sur le terminal ; si
un groupe de processus essaie de lire avec read(2) sur le terminal,
alors le groupe reçoit un signal SIGTSTP, qui le suspend. Les fonctions
tcgetpgrp(3) et tcsetpgrp(3) sont utilisées pour récupérer ou
positionner le groupe de processus au premier plan du terminal de
contrôle.
Les appels setpgid() et getpgrp() sont utilisés par des programmes
comme bash(1) pour créer des groupes de processus pour l’implémentation
du contrôle des travaux depuis l’interpréteur de commande.
Si une session a un terminal de contrôle et le drapeau CLOCAL de ce
terminal n’est pas actif, et une déconnexion se produit, alors le
leader de la session recevra un signal SIGHUP. Si le leader se termine,
le signal SIGHUP sera envoyé à tous les processus du groupe au premier
plan sur le terminal de contrôle.
Si la fin du processus rend un groupe de processus orphelin, et si l’un
des membres de ce groupe est arrêté, alors un signal SIGHUP suivi d’un
signal SIGCONT sera envoyé à tous les processus du groupe orphelin. Un
groupe de processus est orphelin si le parent de chaque processus du
groupe est soit membre de ce groupe ou soit membre d’un groupe de
processus dans une session différente (voyez credentials(7)).
VOIR AUSSI
getuid(2), setsid(2), tcgetpgrp(3), tcsetpgrp(3), termios(3),
credentials(7)
COLOPHON
Cette page fait partie de la publication 3.23 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
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
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> ».