NOM¶
setpgid, getpgid, setpgrp, getpgrp - Définir ou 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(pid_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 (consultez
feature_test_macros(7)) :
getpgid() :
_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
|| /* Depuis la glibc 2.12 : */
_POSIX_C_SOURCE >= 200809L
setpgrp() (POSIX.1) :
_SVID_SOURCE || _XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
setpgrp() (BSD),
getpgrp() (BSD) :
_BSD_SOURCE &&
! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE ||
_XOPEN_SOURCE_EXTENDED || _GNU_SOURCE || _SVID_SOURCE)
DESCRIPTION¶
Toutes ces interfaces sont disponibles sous Linux et sont utilisées pour
récupérer et définir l'identifiant 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 définir le PGID d'un processus.
setpgid() définit à
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.
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.44 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/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). 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> ».